Permalänk
Medlem

Anropa metod ( Java )

Har ett problem. Ska anropa en metod i en switch sats. Switch satsen ligger i main och jag har skapat en metod som ska anropas ( Den fungerar ja ),

Problemet är att jag inte vet hur jag ska anropa den och sedan skriva ut det som metoden returnerar. Vart ska metoden ligga? Innanför main?

Hur gör jag?

Visa signatur

Intel i7 920 (D0) 2.66GHz @ 4GHz Noctua NH-U12P SE1366 | Corsair 6GB DDR3 Triple Channel XMS | Asus P6T SE | Radeon HD4870 1GB DDR5 | Samsung F3 500GB | Corsair 650W | Antec Three Hundred | 22" Benq

Permalänk
Medlem

Metoden ska ligga utanför main men innanför klassen. Ett vanligt metod anrop görs med att skriva metodens namn:

metodEtt();

Ifall du vill skriva ut vad metoden retunerar kan du göra så här:

System.out.println(metodEtt());

Exempel:

public class Exempel{ public int metodEtt(){ return någonting; } public static void main(String[] args){ switch(variabel){ case 1: metodEtt(); System.out.println(metodEtt()); break; case 2: break; } } }

Permalänk
Medlem

Metoden ska ligga utanför main i samma klass förutsatt att du bara använder en klass för dina metoder (och iom att du verkar ny på java så gör du säkert det).

Sen anropar du den bara med metodensNamn(argument till metoden);
Om metoden t.ex. returnerar en int så kör du t.ex.

int returnValue = metodensNamn(argument till metoden);

Permalänk
Medlem

Alltså min metod heter createPlate() . Den har jag definierat innanför classen Valruta och utanför main. I metoden står det return tempPlate;

När jag i switch satsen ska anropa createPlate() så vill jag att det ska skrivas ut vad tempPlate är för nåt. Skriver jag System.out.println(tempPlate) i switchsatsen då?

Visa signatur

Intel i7 920 (D0) 2.66GHz @ 4GHz Noctua NH-U12P SE1366 | Corsair 6GB DDR3 Triple Channel XMS | Asus P6T SE | Radeon HD4870 1GB DDR5 | Samsung F3 500GB | Corsair 650W | Antec Three Hundred | 22" Benq

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av smorris
Alltså min metod heter createPlate() . Den har jag definierat innanför classen Valruta och utanför main. I metoden står det return tempPlate;

När jag i switch satsen ska anropa createPlate() så vill jag att det ska skrivas ut vad tempPlate är för nåt. Skriver jag System.out.println(tempPlate) i switchsatsen då?

Du skriver System.out.println(createPlate());

Metod anropas alltid med namnet på metoden.

Permalänk
Medlem

det står unreachable statement System.out.println(createPlate());

...koden:

class Valruta{

//Skapar en nummerplåt
public static String createPlate() {
Random random = new Random();
String tempPlate = "";
for (int i=0; i<3; i++) {
tempPlate = tempPlate + String.valueOf((char)(random.nextInt(26)+65));
}
for (int i=0; i<3; i++) {
tempPlate = tempPlate + random.nextInt(10);
}
return tempPlate;
System.out.println(createPlate());
}

public static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException{

//throws IOException, NumberFormatException{

System.out.println("1.Slumpa fram bilnummer");
System.out.println("2.Kontrollera bilnummer");
System.out.println("3.Skriv förbjudna ord");
System.out.println("4.Avsluta");

String val=input.readLine();
int s = Integer.parseInt(val);

switch(s){

case 1:
createPlate();
break;

/*case 2:
isPlateValid();
break;

Ser ni felet?

Visa signatur

Intel i7 920 (D0) 2.66GHz @ 4GHz Noctua NH-U12P SE1366 | Corsair 6GB DDR3 Triple Channel XMS | Asus P6T SE | Radeon HD4870 1GB DDR5 | Samsung F3 500GB | Corsair 650W | Antec Three Hundred | 22" Benq

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av smorris

return tempPlate;
System.out.println(createPlate());

System.out..... här kommer aldrig att nås. Så fort programmet kommer till en "return" så avbryts metoden och hoppar tillbaka till dit den blev anropad från.

Permalänk
Medlem

Fixade problemet!!! tack

Visa signatur

Intel i7 920 (D0) 2.66GHz @ 4GHz Noctua NH-U12P SE1366 | Corsair 6GB DDR3 Triple Channel XMS | Asus P6T SE | Radeon HD4870 1GB DDR5 | Samsung F3 500GB | Corsair 650W | Antec Three Hundred | 22" Benq

Permalänk

jag har en kod såhär:

public static void main (String [] args) throws IOException { int x = 1; int y =2; } public static int slut(){ HÄR!!!! Vill jag nå variablerna x och y! }

kan jag göra så att x och y blir typ "globala?" så jag kan nå dem i alla methoder utan att skicka så här:

[CODE]

public static void main (String [] args) throws IOException { int x = 1; int y =2; slut(x,y) } public static int slut(int a, int b){ }

Min riktiga kod är att jag måste när jag isåfall anropar en method så ska 4 stycken fält skickas med som heter anv[], los[], money[], bank[] och då behöver jag hela fältet och ej bara t.ex. anv[1], los[1], money[1], bank[1].
jag vill ha så att alla anv[1], anv[2], anv[3], anv[4] ska följa med.

Permalänk
Skrivet av erikpetersen97:

jag har en kod såhär:

public static void main (String [] args) throws IOException { int x = 1; int y =2; } public static int slut(){ HÄR!!!! Vill jag nå variablerna x och y! }

kan jag göra så att x och y blir typ "globala?" så jag kan nå dem i alla methoder utan att skicka så här:

[CODE]

public static void main (String [] args) throws IOException { int x = 1; int y =2; slut(x,y) } public static int slut(int a, int b){ }

Min riktiga kod är att jag måste när jag isåfall anropar en method så ska 4 stycken fält skickas med som heter anv[], los[], money[], bank[] och då behöver jag hela fältet och ej bara t.ex. anv[1], los[1], money[1], bank[1].
jag vill ha så att alla anv[1], anv[2], anv[3], anv[4] ska följa med.

Skicka med hela vektorn, inte varje element i den var för sig. Så det blir typ metod(anv, los, money, bank);

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem
Skrivet av erikpetersen97:

jag har en kod såhär:

public static void main (String [] args) throws IOException { int x = 1; int y =2; } public static int slut(){ HÄR!!!! Vill jag nå variablerna x och y! }

kan jag göra så att x och y blir typ "globala?" så jag kan nå dem i alla methoder utan att skicka så här:

[CODE]

public static void main (String [] args) throws IOException { int x = 1; int y =2; slut(x,y) } public static int slut(int a, int b){ }

Min riktiga kod är att jag måste när jag isåfall anropar en method så ska 4 stycken fält skickas med som heter anv[], los[], money[], bank[] och då behöver jag hela fältet och ej bara t.ex. anv[1], los[1], money[1], bank[1].
jag vill ha så att alla anv[1], anv[2], anv[3], anv[4] ska följa med.

Det låter på koden som att om man skapar en instans av klassen så får man någon sorts bank-databas?
Där användare 3 lagras i anv[3], lösenordet i los[3] osv?

Då är det rimligt att lägga dessa som privata fält för klassen. Såhär ser det ut:

public class TestFest { private int ettHeltal = -1; private String ettOrd = "Hej"; private int[][] enMatris = new int[40][40]; private int[] enArray; private boolean notSeen; public TestFest(int a, boolean b){ enArray = new int[a]; notSeen = b; metod(); enArray[1] = 1337; //TODO } private void metod(){ int b = getEttHeltal(); if (b == ettHeltal) System.out.println("GREAT SUCCESS!!!"); } public int getEttHeltal(){ return ettHeltal; } public void setEttHeltal(int a){ ettHeltal = a; } // ETC ETC }

Dessa fält får du alltså INTE manipulera direkt från någon annan klass. Det anses som dålig sed att ha publika fält generellt sett. Man manipulerar dessa fält med så kallade setters och man kommer åt dem med getters.

Inom klassen kan du däremot använda punktnotation. Tex:

public class TestFest { private int a; public TestFest(int a){ this.a = a; } public static void main(String args[]){ TestFest objekt = new TestFest(42); objekt.a = 4; int b = objekt.a - 4; } }

Visa signatur

En potatis

Permalänk

Löst problemet genom en annan tråd! men tack ändå för er tid.