Kod w Java - jak go ulepszyć ?

0

Witam, napisałem pierwszy program w Java z interfejsem użytkownika. Chciałbym się zwrócić z prośbą do osób które dobrze znają się na Java aby ocenili go, powiedzieli co jest źle i co ewentualnie mógł bym w nim zmienić tak by kod był bardziej przejrzysty.

KOD: http://pastebin.com/vGrJXQCy

Z góry dziękuję za wszelkie uwagi :)

0

jezeli to Swing to korzustaj z menagerow rozkladu (layoutManager czy jakos tak, BorderLayout GridLayout itd).

Jakbyś mial liczby od 0 do 1000 to też byś ręcznie wklepywal 1000 razy dodawnie guzika ? poczytaj o petli for

a po co robisz coś takiego?:

                **String str = text.getText();**
                ScriptEngineManager mgr = new ScriptEngineManager();
                ScriptEngine engine = mgr.getEngineByName("JS");
                **String foo = str;**

do czegos Ci string str potrzebny jest?

wywal ActionListenery z wpisywaniem liczby do klasy wewnętrznej ktora jako argument bedzie przyjmowala liczbe ktora ma dopisac do konsoli, zamiast przepisywac ta sama funkcje 10 razy

na pewno bywalo gorzej :P

4

To jest na poważnie?

oczy.jpg

90% tego kodu to copy-paste a na koniec wisienka na torcie, wyliczenie działania przez eval() z javowego wbudownego silnika JS.
Ulepszenie go:

  • nuke from orbit
  • kill with fire
  • użyć MVC i głowy
3

@Shalom Twój komentarz był rzeczywiście potrzebny. Nie masz życia towarzyskiego, że spędzasz czas na pisaniu złośliwości? Najlepiej jest zgnoić kogoś kto próbuje się uczyć.

0

Dokładnie

3

gratulacje w zwiazku z napisaniem pierwszego programu :)
przede wszystkim musisz wywalic nadmiarowy kod i sensownie nazwac zmienne. w miedzyczasie czytaj tutorial czy z czego tam sie uczysz i bedzie dobrze

0

Jeszcze kilka uwag:

  • zamknięcie głównego okna kliknięciem w krzyżyk nie kończy programu, a powinno,
  • ja bym umieścił dwa pola tekstowe, jedno z obliczanym wyrażeniem, drugie z wynikiem,
  • obiekt ScriptEngineManager mgr = new ScriptEngineManager(); powinien być tworzony tylko raz, a nie po każdym kliknięciu w przycisk =,
  • dlaczego cały kod jest w metodzie main, przenieś go do konstruktora,
  • wielu użytkowników woli wpisywać wyrażenie matematyczne z klawiatury, dla nich naturalne działanie to naciśnięcie klawisza Enter, dodaj do pola tekstowego ActionListenera z identyczną obsługą jak przycisk =,
  • treść komunikatu o błędzie to już zupełny surrealizm:
    calculator.png error.png
1

@Shalom ja jestem tylko anonimowym trollem, ty moderatorem z niedowartościowanym ego ;D

0
  1. Przepuść kod przez SonarQube i zobacz co ci wypluje
  2. Effective Java
0

Dziękuje wszystkim za cenne uwagi, jak się podszkolę i zrobię coś nowego to na pewno się pochwale :)

0

Mam jeszcze jedno pytanko a juz nie chce zakładać nowego posta :)
Czy znacie jakies dobre polskie tutoriale gdzie mógł bym się nauczyć konstruowania prostej logiki gry typu snake itp.. nauczyć się robienia kolizji i jakiś animacji. Chciałbym zrobić coś takiego, że z góry lecą jakieś powiedzmy kwadraciki a my sterujemy no dole innym kwadracikiem i próbujemy uniknąć tych spadających :)

0

Ma ktoś może jakiś pomysł dlaczego nie działa mi obsługa klawiszy w kodzie który wkleiłem poniżej ?
Z klasy Game:

public Game(Frame container)
	{
		container.addKeyListener(new KeyAdapter()
		{
			public void KeyPressed(KeyEvent e) 
			{
				if(e.getKeyCode() == KeyEvent.VK_RIGHT) player.moveOnX(10);
				if(e.getKeyCode() == KeyEvent.VK_LEFT) player.moveOnX(-10);
			    repaint();
			}
			
			
		}); 

z klasy Player:

public void moveOnX(int speed)
	{
		Box.x += speed;
		if(Box.x < 0) Box.x = 0;
		if(Box.x > instence.getGameDimesion().width ) Box.x = instence.getGameDimesion().width; 
	} 

W klasie main dodaje to tak: game = new Game(frame);
Z góry dziękuje za pomoc :)

1

z tego co paiętam to klawisze strzałek nie reagują na Key Pressed. spróbuj na keyTyped czy coś takiego

0

Po pierwsze... nie pisz wszystkiego w majnie. Podziel to na klasy/funkcje/metody, tak, żeby każda z nich robiła jedną i tylko jedną z nich. Bez tego ten kod nie jest wart nawet czytania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1