Använda värden tagna ur if/if else/ else statements i java.

Permalänk

Använda värden tagna ur if/if else/ else statements i java.

Kommentarer finns i koden, men jag vill kunna mata in ett tärningsvärde mellan 1-3, värdet jag matar in ska sedan jämnföras med värderna som finns i if/else och beorende på dess värde ska en speciellt del utföras. input = 2 output = kast_2. Efter att alla tre tärninar har kastats så vill jag kunna sammanlägga dom. Något som inte verkar fungerar, troligen på grund av {} som jag behövde anväda för att if else och else skulle fungera. Uppskattar all feedback, möjligen så försöker jag använda fel metod eller så har jag missat något. Tack i förhand.

public static void main(String args[]) { int i; for (i = 0; i < 3; i++) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("Välj tärning"); int tärning = input.nextInt(); if(tärning == 1) { int kast_1 = (int) (Math.random()*6)+1; System.out.println(kast_1); //Detta är till för avgöra vilken tärning som ska kastas, så om jag matar in 2 så kastas tärning 2 och så vidare. }else if (tärning == 2) { int kast_2 = (int) (Math.random()*6)+1; System.out.println(kast_2); }else if (tärning == 3) { int kast_3 = (int) (Math.random()*6)+1; System.out.println(kast_3); }else System.out.print("Wrong number"); int total = kast_1 + kast_2 + kast_3; //Jag vill kunna använda kasten som kommer från if/if else delen ovanför. System.out.println(total); //Jag vill veta det totala värdet på alla tre kast. Men på grund anv if/if else delen ovanför så kan jag inte använda dom. } }

Permalänk
Hedersmedlem

Du deklarerar variablerna inuti if-satserna och det är bara inom if-satsen som variabeln kommer leva kvar då. De "syns" inte utanför.

Permalänk
Medlem

Deklarera variablerna utanför if/else;

public static void main(String args[]) { int i; for (i = 0; i < 3; i++) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("Välj tärning"); int tärning = input.nextInt(); // Deklarera här så är de på samma "nivå" som din beräkning av totalen int kast_1 = 0; int kast_2 = 0; int kast_3 = 0; if(tärning == 1) { kast_1 = (int) (Math.random()*6)+1; System.out.println(kast_1); //Detta är till för avgöra vilken tärning som ska kastas, så om jag matar in 2 så kastas tärning 2 och så vidare. }else if (tärning == 2) { kast_2 = (int) (Math.random()*6)+1; System.out.println(kast_2); }else if (tärning == 3) { kast_3 = (int) (Math.random()*6)+1; System.out.println(kast_3); }else System.out.print("Wrong number"); int total = kast_1 + kast_2 + kast_3; //Jag vill kunna använda kasten som kommer från if/if else delen ovanför. System.out.println(total); //Jag vill veta det totala värdet på alla tre kast. Men på grund anv if/if else delen ovanför så kan jag inte använda dom. } }

Permalänk
Skrivet av Shimonu:

Du deklarerar variablerna inuti if-satserna och det är bara inom if-satsen som variabeln kommer leva kvar då. De "syns" inte utanför.

Det var det jag tänkte. Finns det något sätt att få båda effekterna? För if-satsen är nödvändig för att kunna välja tärning 3 först annars måste jag välja tärningarrna i rätt ordning vilket jag inte vill.

Permalänk
Medlem
Skrivet av MaskenLilja:

Kommentarer finns i koden, men jag vill kunna mata in ett tärningsvärde mellan 1-3, värdet jag matar in ska sedan jämnföras med värderna som finns i if/else och beorende på dess värde ska en speciellt del utföras. input = 2 output = kast_2. Efter att alla tre tärninar har kastats så vill jag kunna sammanlägga dom. Något som inte verkar fungerar, troligen på grund av {} som jag behövde anväda för att if else och else skulle fungera. Uppskattar all feedback, möjligen så försöker jag använda fel metod eller så har jag missat något. Tack i förhand.

public static void main(String args[]) { int i; for (i = 0; i < 3; i++) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("Välj tärning"); int tärning = input.nextInt(); if(tärning == 1) { int kast_1 = (int) (Math.random()*6)+1; System.out.println(kast_1); //Detta är till för avgöra vilken tärning som ska kastas, så om jag matar in 2 så kastas tärning 2 och så vidare. }else if (tärning == 2) { int kast_2 = (int) (Math.random()*6)+1; System.out.println(kast_2); }else if (tärning == 3) { int kast_3 = (int) (Math.random()*6)+1; System.out.println(kast_3); }else System.out.print("Wrong number"); int total = kast_1 + kast_2 + kast_3; //Jag vill kunna använda kasten som kommer från if/if else delen ovanför. System.out.println(total); //Jag vill veta det totala värdet på alla tre kast. Men på grund anv if/if else delen ovanför så kan jag inte använda dom. } }

Läs på om "scopes" i Java

Permalänk
Skrivet av gothxx:

Deklarera variablerna utanför if/else;

public static void main(String args[]) { int i; for (i = 0; i < 3; i++) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("Välj tärning"); int tärning = input.nextInt(); // Deklarera här så är de på samma "nivå" som din beräkning av totalen int kast_1 = 0; int kast_2 = 0; int kast_3 = 0; if(tärning == 1) { kast_1 = (int) (Math.random()*6)+1; System.out.println(kast_1); //Detta är till för avgöra vilken tärning som ska kastas, så om jag matar in 2 så kastas tärning 2 och så vidare. }else if (tärning == 2) { kast_2 = (int) (Math.random()*6)+1; System.out.println(kast_2); }else if (tärning == 3) { kast_3 = (int) (Math.random()*6)+1; System.out.println(kast_3); }else System.out.print("Wrong number"); int total = kast_1 + kast_2 + kast_3; //Jag vill kunna använda kasten som kommer från if/if else delen ovanför. System.out.println(total); //Jag vill veta det totala värdet på alla tre kast. Men på grund anv if/if else delen ovanför så kan jag inte använda dom. } }

Om jag gör så kommer if-satsen inte fungera och det är if satsen som bestämmer vilken tärning som ska kastas beroende på vad jag inmatar genom Scanner.

1. Scanner input 1-3.
2. beroende på input utför tärning_1 till tärning_3.
3. Sammanlägg värdet på alla tre kast.
4.Skriv ut värdet på alla tre kast.
5.(Detta är inte med i den här delen men efter den gjort det så ska hela saken upprepas).

Permalänk
Skrivet av dlq84:

Läs på om "scopes" i Java

Tack, så det är mina if-satser som skapar problemet. Vet du något sätt att uppnå samma resultat utan if?

Permalänk
Medlem
Skrivet av MaskenLilja:

Om jag gör så kommer if-satsen inte fungera och det är if satsen som bestämmer vilken tärning som ska kastas beroende på vad jag inmatar genom Scanner.

1. Scanner input 1-3.
2. beroende på input utför tärning_1 till tärning_3.
3. Sammanlägg värdet på alla tre kast.
4.Skriv ut värdet på alla tre kast.
5.(Detta är inte med i den här delen men efter den gjort det så ska hela saken upprepas).

Som din kod ser ut kommer den välja en tärning (eller 0 om man ger fel nummer), aldrig 3. Så om du vill få tre kast med ett kast åt gången kommer du antingen behöva tre uppsättningar av samma kod (inte en bra grej) eller en loop.

Bättre siffror
Permalänk
Medlem

@MaskenLilja: Variabler slutar existera när programmet når det avslutande } för scopet de är deklarerade i. Om du vill att variablerna behåller sina värden genom hela körningen av loopen så måste du därför även deklarera dem utanför loopen, annars kommer nya variabler allokeras i varje iteration av loopen.

Permalänk
Medlem
Skrivet av MaskenLilja:

Tack, så det är mina if-satser som skapar problemet. Vet du något sätt att uppnå samma resultat utan if?

Det är inte if-satserna som är problemet utan att du deklarerar dina variabler inne i dem. Gör det utanför bara.

if(x) { int roll1 = dice.RollNext(); } if(roll1 > 1) //kommer att krascha här för roll1 finns inte längre { do.Something(); } //Jämfört med: int roll1; if(x) { roll1 = dice.RollNext(); } if(roll1 > 1) //kommer att fungera för roll1 finns fortfarande { do.Something(); }