Zmiana wartosci zmiennej w metodzie

0

Siema,

mam przykladowo cos takiego:

public class Main{

	public static void main(String args[]){
		Punkt punkt = new Punkt();

		Punkt.zmien(punkt);

		System.out.println("Współrzędne to: "+punkt.x+" "+punkt.y);
	}
} 
public class Punkt {
	int x = 5;
	int y = 5;
           static void zmien(Punkt pkt){
		pkt.x++;
		pkt.y++;
	}

} 

I tu wszystko jest jasne i dziala. Ale co zrobic w przypadku, kiedy do klasy Main chcialbym dolozyc jeszcze jedno wywolanie metody zmien, a w klasie punkt mam

public class Punkt {
	int x = 5;
	int y = 5;

           int z = 10;
           int a = 20;
           static void zmien(Punkt pkt){
		pkt.x++;
		pkt.y++;
	}

} 

to znaczy, chcialbym osobno wywolac zmien dla x i y, a osobno dla z i a. Czy moge metody zmien uzyc jako takiej uniwersalnej, czy musialbym utworzyc osobne zmien1 dla z i a?

Troche pogmatwalem, ale mam nadzieje, ze ktos pomoze.

2

Po pierwsze, nie ucz się tak pisać programów.

public class Main{
 
        public static void main(String args[]){
                Punkt punkt = new Punkt();
 
                punkt.zmien();
 
                System.out.println("Współrzędne to: "+punkt.x+" "+punkt.y);
        }
} 
public class Punkt {
        int x = 5;
        int y = 5;
        void zmien(){
                x++;
                y++;
        }
 
} 

A po drugie, jeśli chcesz zmieniać inne pola, to musisz napisać inna metodę.

0

Na prawdę dziwnie to napisałeś.. Po co przekazujesz obiekt, do tej metody, skoro możesz wywołać po prostu komunikat?? Możesz przeładować tą metodę, ale za bardzo nie mam pomysłu, jak to zrobić, żeby strasznie nie udziwniać..

0

ogolnie to byl przyklad z neta zaczerpniety, bo mam taki problem, ze w moim programie mam kilka pol, np:

 int enemyX = 20;
int enemyY = 20;
boolean enemyExist = false;

int enemy1X = 40;
int enemy1Y = 20;
boolean enemy1Exist = false;

int enemy2X = 60;
int enemy2Y = 20;
boolean enemy2Exist = false;

i mam aktualnie 3 metody, ktore robia to samo, ale kazda z nich jest jakby dla innej trojki(tych pol). Nie wiem jak stworzyc jedna uniwersalna metode (czy to mozliwe), zeby podac te zmienne jako parametry do metody, gdzie uleglyby zmianie i te zmiany bylyby widoczne na zewnatrz.

0

Rozsądnie ich nie przeładujesz, bo wszystkie punkty są integerami.. a sygnatura musi się różnić. Z ifami też bym się nie bawił.. Chyba 3metody, to najrozsądniejsze wyjście..
edit// ale zaraz zaraz.. Co to jest Enemy? Dlaczego nie zrobisz Sobie do tego osobnej klasy?

0

@wojtekf natychmiast zapomnij o tym miejscu z którego to wziąłeś! To jest koszmar!
Zrób klasę która przechowuje takie pola i napisz metodę dla obiektów tej klasy po prostu.

0
Shalom napisał(a)

@wojtekf natychmiast zapomnij o tym miejscu z którego to wziąłeś! To jest koszmar!
Zrób klasę która przechowuje takie pola i napisz metodę dla obiektów tej klasy po prostu.

nie wiem czy dobrze zrozumialem - powinienem stworzyc np klase Enemy, Enemy1 i Enemy2 i kazda z nich powinna miec metode dla obiektow tej klasy, nawet gdyby kazda z tych metod robila to samo, tylko dla roznych pol? czy to nie bedzie redundancja?

0

Nie. Przecież Enemy, Enemy1 i Enemy2 są identyczne więc powinieneś mieć jedną klasę i 3 obiekty...

0
Shalom napisał(a)

Nie. Przecież Enemy, Enemy1 i Enemy2 są identyczne więc powinieneś mieć jedną klasę i 3 obiekty...

chyba czaje, czy chodzi o cos takiego:

 public class Main{
 
        public static void main(String args[]){
                Enemy enemy = new Enemy();
                Enemy enemy1 = new Enemy();
                Enemy enemy2 = new Enemy();
                
                enemy.enemyX = 20;
                enemy.enemyY = 20;
                enemy.enemyExist = false;
                
                enemy1.enemyX = 40;
                enemy1.enemyY = 20;
                enemy1.enemyExist = false;
                
                enemy2.enemyX = 60;
                enemy2.enemyY = 20;
                enemy2.enemyExist = false;
                
                enemy.zmien();
                enemy1.zmien();
                enemy2.zmien();
 
                System.out.println("Współrzędne to: "+enemy.enemyX+" "+enemy.enemyY + " " + enemy.enemyExist);
                System.out.println("Współrzędne to: "+enemy1.enemyX+" "+enemy1.enemyY + " " + enemy1.enemyExist);
                System.out.println("Współrzędne to: "+enemy2.enemyX+" "+enemy2.enemyY + " " + enemy2.enemyExist);
        }
} 


public class Enemy {
        int enemyX;
        int enemyY;
        boolean enemyExist;
        void zmien(){
        	enemyX++;
        	enemyY++;
            enemyExist = true;
        }
 
} 
0
wojtekf napisał(a)
                Enemy enemy = new Enemy();
                Enemy enemy1 = new Enemy();
                Enemy enemy2 = new Enemy();
                
                enemy.enemyX = 20;
                enemy.enemyY = 20;
                enemy.enemyExist = false;
                
                enemy1.enemyX = 40;
                enemy1.enemyY = 20;
                enemy1.enemyExist = false;
                
                enemy2.enemyX = 60;
                enemy2.enemyY = 20;
                enemy2.enemyExist = false;
        }
} 

Nie ładniej byłoby użyć konstruktora?

2

@wojtekf błagam! Zanim zaczniesz pisać grę, naucz się podstaw. NIE DA się napisać żadnej gry, tym bardziej takiej z przeciwnikami, nie znając absolutnych podstaw programowania. Takie rzeczy jak konstruktory, tablice czy kolekcje są absolutnie konieczne!

0

wiem, wiem... konstruktor

 public class Main{
 
        public static void main(String args[]){
                Enemy enemy = new Enemy(20, 20, false);
                Enemy enemy1 = new Enemy(40, 20, false);
                Enemy enemy2 = new Enemy(60, 20, false);
                
                enemy.zmien();
                enemy1.zmien();
                enemy2.zmien();
 
                System.out.println("Współrzędne to: "+enemy.enemyX+" "+enemy.enemyY + " " + enemy.enemyExist);
                System.out.println("Współrzędne to: "+enemy1.enemyX+" "+enemy1.enemyY + " " + enemy1.enemyExist);
                System.out.println("Współrzędne to: "+enemy2.enemyX+" "+enemy2.enemyY + " " + enemy2.enemyExist);
        }
}

public class Enemy {
        public Enemy(int enemyX, int enemyY, boolean enemyExist) {
        	this.enemyX = enemyX;
        	this.enemyY = enemyY;
        	this.enemyExist = enemyExist;
        }
        void zmien(){
        	enemyX++;
        	enemyY++;
            enemyExist = true;
        }
 
        int enemyX;
        int enemyY;
        boolean enemyExist;
} 

Dzieki za konstruktywna krytyke :)

0

Na początku wrogowie nie istnieją, możesz zatem trochę skrócić kod:

 public class Main{
 
        public static void main(String args[]){
                Enemy enemy = new Enemy(20, 20);
                Enemy enemy1 = new Enemy(40, 20);
                Enemy enemy2 = new Enemy(60, 20);
 
                enemy.zmien();
                enemy1.zmien();
                enemy2.zmien();
 
                System.out.println("Współrzędne to: "+enemy.enemyX+" "+enemy.enemyY + " " + enemy.enemyExist);
                System.out.println("Współrzędne to: "+enemy1.enemyX+" "+enemy1.enemyY + " " + enemy1.enemyExist);
                System.out.println("Współrzędne to: "+enemy2.enemyX+" "+enemy2.enemyY + " " + enemy2.enemyExist);
        }
}
 
public class Enemy {
        public Enemy(int enemyX, int enemyY) {
                this.enemyX = enemyX;
                this.enemyY = enemyY;
        }
        void zmien(){
                enemyX++;
                enemyY++;
            enemyExist = true;
        }
 
        int enemyX;
        int enemyY;
        boolean enemyExist=false;
} 

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