0
Scanner scan = new Scanner(System.in);

System.out.println("Enter up to 5 Tests:");
int test1 = scan.nextInt();
if (test1 > -1){
  int test2 = scan.nextInt();
} else {
  if (test2 > -1){
    int test3 = scan.nextInt();
  } else {
    if (test3 > -1){
      int test4 = scan.nextInt();
    } else {
      if (test4 > -1){
        int test5 = scan.nextInt();
      }
    }
  }
}

我收到“test2无法解析为变量”的编译错误,除了test1. 我认为这是因为test2在我们通过输入一个值之前它不存在。我可以在这里做些什么来让 Java 开心?

4

4 回答 4

5

您正在test2此块内定义 -

if (test1 > -1){
    int test2 = scan.nextInt();
}

因此,您将无法在外部访问它。这就是 Java 的工作原理。test3and也是如此test4test5如果您在其定义块之外访问它,也同样如此)。

要使变量可用于整个方法,您可以执行以下操作 -

public static void main (String str[]) throws IOException {

    int test1, test2, test3, test4, test5;

    // rest of your code;
}

要了解有关变量范围的更多信息,请快速浏览

你可能还想用一些初始值来初始化你的变量,因为在没有初始化的if情况下直接测试它们会给你带来麻烦。

于 2013-10-09T12:24:04.163 回答
0

这是因为 test2,test3 和 test4 是局部变量。将 test2,test3 和 test4 设为全局变量 test2,test3 和 test4 在 if 块中定义 试试下面的代码

public static void main (String str[]) throws IOException {


          Scanner scan = new Scanner(System.in);
int test1=0,test2=0,test3=0,test4=0,test5=0;
          System.out.println("Enter up to 5 Tests:");
          test1 = scan.nextInt();
          if (test1 > -1){
          test2 = scan.nextInt();
          } else {
            if (test2 > -1){
          test3 = scan.nextInt();
          } else {
            if (test3 > -1){
          test4 = scan.nextInt();
          } else {
            if (test4 > -1){
          test5 = scan.nextInt();
            }}}}
于 2013-10-09T12:23:35.143 回答
0

基本上,test2、test3 等都在一个范围内声明,但在该范围关闭后,它们不再可用。作为修复(根据您要执行的操作来判断),我建议在方法的开头声明它们:=在方法的开头声明整数:

public static void main(String str[])
        throws IOException
{
    int test1 = -1, test2 = -1, test3 = -1, test4 = -1, test5 = -1;

    Scanner scan = new Scanner(System.in);

    System.out.println("Enter up to 5 Tests:");
    test1 = scan.nextInt();
    if(test1 > -1)
    {
        test2 = scan.nextInt();
    }
    else
    {
        if(test2 > -1)
        {
            test3 = scan.nextInt();
        }
        else
        {
            if(test3 > -1)
            {
                test4 = scan.nextInt();
            }
            else
            {
                if(test4 > -1)
                {
                    test5 = scan.nextInt();
                }
            }
        }
    }
}

此外,您的方法看起来不像您想要的那样;如果test1是有效的,它接受 test2,但在那里完成。为此,您可能想要做的是:

public static void main(String str[])
        throws IOException
{
    int test1 = -1, test2 = -1, test3 = -1, test4 = -1, test5 = -1;

    Scanner scan = new Scanner(System.in);

    System.out.println("Enter up to 5 Tests:");

    test1 = scan.nextInt();
    if(test1 > -1)
    {
        test2 = scan.nextInt();
    }
    if(test2 > -1)
    {
        test3 = scan.nextInt();
    }
    if(test3 > -1)
    {
        test4 = scan.nextInt();
    }
    if(test4 > -1)
    {
        test5 = scan.nextInt();
    }

    // Work with the tests.
}
于 2013-10-09T12:24:41.063 回答
0

由于test2第一个 if 语句对外部不可见,因此您将收到此错误。定义您的变量,以便它们可以访问整个 if else 块。

于 2013-10-09T12:31:40.383 回答