变量未被方法识别

时间:2017-06-02 12:24:35

标签: java

我是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

我无法弄清楚如何修复此错误。我将非常感谢您的意见以及任何其他一般性建议

由于

4 个答案:

答案 0 :(得分: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;
    }

....
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

变量pick超出范围。您必须在所有if else语句之外声明它。如果所有if else条件都失败,则comChoice方法将无法找到变量pick(因为它仅在if else块中声明),它必须返回。

更正后的代码

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;
      }
    }
  }
}

答案 3 :(得分:0)

您在pick结构中声明了变量if else。这样做会导致无法从if else结构外部访问您的变量的问题。简单来说,变量pick的范围仅限于您的if else结构。您必须在if else结构之外声明您的变量(并初始化它,否则您将在您的情况下得到错误)。像这样:

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

希望这有帮助!