problem z klasami w javie

0

Mam zadeklarowaną klase a w niej funkcje, która poprzez pętle zmienia wartosci liczb. Następnie wywołuje tę klase, ale tak jakby funkcje tej klasy niedziałają. Nie wiem czy ta funckja wykonuje sie tylko raz, czy poprosty ekran sie nie odświeża i niepokazuje nowych wartości. Wpisywałem repaint ale nic z tego. Wywołana clasa jest w pętli if a warunek w tej pętli jest true. Wiem ze tak trudno powiedziec co jes tnie tak, ale mozecie mi pomóc jakoś??

0

Wiem ze tak trudno powiedziec co jes tnie tak

Cieszy mnie Twoja wiedza

ale mozecie mi pomóc jakoś??

Jak zarzucisz kodem, to czemu nie?

0

klasa jest taka:

class lospol
{
	Random random = new Random();
     //losowe położenie kwadrata
      public void losuj(int zwolnienie,int zwolnienie2,int ilosc,int polx, int poly, int polxx, int polyy, int wybor){

        if((zwolnienie<=zwolnienie2) && (ilosc<=20) && (wybor==1))//petla spowalniajaca
        {
	        if((ilosc<=20) && (zwolnienie==zwolnienie2))
            {
             polx = Math.abs(random.nextInt() % 3);
		     poly = Math.abs(random.nextInt() % 3); 
		
		     if (polx==0)
		     {
                   polxx=10;
		     }
		     if (polx==1)
		     {
                   polxx=80;
		     }
		
		     if (polx==2)
		     {
                   polxx=150;
		     }

		     if (poly==0)
		     {
                   polyy=30;
		     }
		     if (poly==1)
		     {
                   polyy=80;
		     }
		     if (poly==2)
		     {
                   polyy=130;
		     }
		
		     ilosc++;
		     //repaint();
           }
           zwolnienie++;
	       if(zwolnienie >= (zwolnienie2 + 1))
	        {
		       zwolnienie = 1;
	        }
        }
	  }
}

a wywoluje ja:
lospol michal2 = new lospol();
a potem:

if(wybor==1)
			{
				michal2.losuj(zwolnienie, zwolnienie2, ilosc, polx, poly, polxx, polyy, wybor);
				repaint();

g.drawImage (kwadrat,polxx, polyy,0); 
...
}

i dlaczego ta pętla mi niedziala po wywolaniu tej funkji??
Obrazek niezmienia położenia;(

0

W Javie parametry, które mają jeden z typów prymitywnych(podstawowych?) (np. int, double) są przekazywane przez wartość a nie przez referencję. Stąd Twój problem. Wewnątrz funkcji nie możesz zmienić wartości przekazywanych parametrów (o typie prymitywnym). Możesz zmienić funkcję tak aby przyjmowała jako parametry konkretne obiekty, czyli np.

    public void losuj(Integer px, Integer py) {
    ...
    }

pzdr,
y.

0

Poza tym:
Ja bym użył zmiennych globalnych(jakoś wtedy czuję się pewniej) w tej pierwszej klasie i napisał metody typu set i get do nich.

Poza tym.

Rysujesz w PAINT!!

Jak masz tak zrobioną drugą klasę, jak masz, to nigdy Ci się nie odrysuje.

public void paint(Graphics g){}

Gdy wywołujesz repaint(), metoda paint() jest wykonywana.

Poza tym nazewnictwo(oho, już się czepiam). Przyjęło się pisać nazwy klas WielkąLiterą.

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