2017-06-02 9 views
1

私はJavaには比較的新しいので、ロック、ペーパー、ハサミを再生する簡単なプログラムを作成しています。メソッドで変数が認識されない

import java.util.Random; 
import java.util.Scanner; 

public class Main { 
    public static String comChoice() { 
    Random rand = new Random(); 
    int num = rand.nextInt(299) + 1; 

    if (num >= 1 && num <= 99) { 
     String pick = "SCISSORS"; 
    } else if (num >= 100 && num <= 199) { 
     String pick = "ROCK"; 
    } else if (num >= 200 && num <= 299) { 
     String pick = "PAPER"; 
    } 
    return pick; 
    } 

    public static void main(String args[]) { 
    int wins = 0; 
    int losses = 0; 
    int ties = 0; 
    while (1 == 1) { 
     Scanner s = new Scanner(System.in); 
     System.out.println("Would you like to play Rock Paper Scissors? Y/N"); 
     String n = s.next(); 

     if (n.equalsIgnoreCase("Y")) { 
     Scanner t = new Scanner(System.in); 
     System.out.println("Enter your pick: rock, paper, or scissors"); 
     String userChoice = t.next(); 

     String pick = comChoice(); 

     if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("SCISSORS")) { 
      System.out.println("TIE"); 
      ties++; 
     } else if (userChoice.equalsIgnoreCase("ROCK") && pick.equalsIgnoreCase("SCISSORS")) { 
      System.out.println("WIN"); 
      wins++; 
     } else if (userChoice.equalsIgnoreCase("PAPER") && pick.equalsIgnoreCase("SCISSORS")) { 
      System.out.println("LOSE"); 
      losses++; 
     } else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("ROCK")) { 
      System.out.println("LOSE"); 
      losses++; 
     } else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("PAPER")) { 
      System.out.println("WIN"); 
      wins++; 
     } else { 
      System.out.println("Enter a valid choice"); 
     } 
     } else { 
     System.out.println("You won " + wins + " matches"); 
     System.out.println("You tied " + ties + " matches"); 
     System.out.println("You lost " + losses + " matches"); 
     break; 
     } 
    } 
    } 
} 

私は私の方法でエラーを取得しています、これを言う:

Main.java:23: error: cannot find symbol 
    return pick; 
     ^
symbol: variable pick 
location: class Main 
1 error 

exit status 1 

私はこのエラーを修正する方法を見つけ出すことはできませんこれはコードです。私はあなたの入力だけでなく、他の一般的なアドバイス

+2

javaの可変範囲について知る! –

+0

条件内で変数を宣言しています。これらは条件の後では見えません。 –

答えて

0

pickが範囲外である

感謝を申し上げ。 comChoiceメソッドの最初に宣言してみてください。

したがって:

public static String comChoice() { 
    String pick=null; 
    Random rand = new Random(); 
    int num = rand.nextInt(299) + 1; 

    if (num >= 1 && num <= 99) { 
     pick = "SCISSORS"; 
    } else if (num >= 100 && num <= 199) { 
     pick = "ROCK"; 
    } else if (num >= 200 && num <= 299) { 
     pick = "PAPER"; 
    } 
    return pick; 
} 
1

あなたの変数はif文でのみ表示されます。スコープについて読む。

変更:

import java.util.Scanner; 
import java.util.Random; 

public class Main { 
    public static String comChoice() { 
     Random rand = new Random(); 
     int num = rand.nextInt(299) + 1; 
     String pick = null; 
     if (num >= 1 && num <= 99) { 
      pick = "SCISSORS"; 
     } else if (num >= 100 && num <= 199) { 
      pick = "ROCK"; 
     } else if (num >= 200 && num <= 299) { 
      pick = "PAPER"; 
     } 
     return pick; 
    } 

.... 
} 
+0

さて、助けてくれてありがとう! –

0

変数pickは範囲外です。すべてif elseステートメントの外側に宣言する必要があります。 if elseの条件がすべて失敗した場合、comChoiceメソッドは、返さなければならない変数pick(if elseブロック内で宣言されている)を見つけることができません。

はあなたがif else構造であなたの変数を宣言しpickコード

import java.util.Scanner; 
import java.util.Random; 

public class Main 
{ 
    public static String comChoice() 
    { 
    Random rand = new Random(); 
    int num = rand.nextInt(299) + 1; 

    String pick = ""; 

    if(num >= 1 && num <= 99) 
    { 
     pick = "SCISSORS"; 
    } 
    else if (num >= 100 && num <= 199) 
    { 
     pick = "ROCK"; 
    } 
    else if (num >= 200 && num <= 299) 
    { 
     pick = "PAPER"; 
    } 
    return pick; 
    } 
    public static void main (String args[]) 
    { 
    int wins = 0; 
    int losses = 0; 
    int ties = 0; 
    while (1 == 1) 
    { 
     Scanner s = new Scanner (System.in); 
     System.out.println("Would you like to play Rock Paper Scissors? Y/N"); 
     String n = s.next(); 

     if (n.equalsIgnoreCase("Y")) 
     { 
     Scanner t = new Scanner (System.in); 
     System.out.println("Enter your pick: rock, paper, or scissors"); 
     String userChoice = t.next(); 

     String pick = comChoice(); 

     if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("SCISSORS")) 
     { 
      System.out.println("TIE"); 
      ties++; 
     } 
     else if (userChoice.equalsIgnoreCase("ROCK") && pick.equalsIgnoreCase("SCISSORS")) 
     { 
      System.out.println("WIN"); 
      wins++; 
     } 
     else if (userChoice.equalsIgnoreCase("PAPER") && pick.equalsIgnoreCase("SCISSORS")) 
     { 
      System.out.println("LOSE"); 
      losses++; 
     } 
     else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("ROCK")) 
     { 
      System.out.println("LOSE"); 
      losses++; 
     } 
     else if (userChoice.equalsIgnoreCase("SCISSORS") && pick.equalsIgnoreCase("PAPER")) 
     { 
      System.out.println("WIN"); 
      wins++; 
     } 
     else 
     { 
      System.out.println("Enter a valid choice"); 
     } 
     } 
     else 
     { 
     System.out.println("You won " + wins + " matches"); 
     System.out.println("You tied " + ties + " matches"); 
     System.out.println("You lost " + losses + " matches"); 
     break; 
     } 
    } 
    } 
} 
0

を修正しました。これを実行すると、変数がそのif else構造体の外部からアクセスできないという問題が発生します。簡単に言えば、変数pickのスコープはif else構造に制限されています。変数を宣言して(そしてそれを初期化する必要があります。そうでなければ、あなたのケースではエラーが発生します)、if else構造体の外にあります。このように:

String pick = null; 
if(num >= 1 && num <= 99) { 
... 
... 
...// All your if's and else's 
} 
return pick; 

希望します。

関連する問題