Java在编译期间找不到符号

时间:2014-05-04 12:43:08

标签: java string counter

我遇到了问题。我写了一个程序,它允许我计算一个特定的数字,并能够使用前缀和后缀。我需要这个来构建另一个程序。 这是我的代码(// offen是德语for open,// zu for closed)

public class zael{ //offen1
    public static void main(String[] args){//offen2
        int z = 0;
        System.out.println("Bis welche Zahl willst du zaelen?");
        String keins = System.console().readLine();
        int k = Integer.parseInt(keins);
        System.out.println("Willst du einen prefix? (Y/N)");
        String p = System.console().readLine();
        if (p.equals ("Y")){//offen3
            System.out.println("Gib deinen Prefix an!");
            String pref = System.console().readLine();
        }//zu3
        System.out.println("Willst du einen Suffix? (Y/N)");
        String s = System.console().readLine();
        if (s.equals ("Y")) {//offen4
            System.out.println("Gib deinen Suffix an!");
            String suff = System.console().readLine();
        }//zu4
        if (p.equals ("Y")){//offen5
            while(z < k) {//offen6
                if (s.equals ("Y")) {//offen7
                    System.out.println(pref);
                    System.out.print(z+1);
                    System.out.print(suff);
                    z = z + 1;
                }//zu7
                else {//offen8
                    System.out.println(pref);
                    System.out.print(z+1);
                    z = z + 1;
                }//zu8
            }//zu6
        }//zu5
        else {//offen9
            while (z < k){//offen10
                if (s.equals ("Y")) {//offen11
                    System.out.println("Gib deinen Suffix an!");
                    String suff = System.console().readLine();
                    System.out.println(z+1 + suff);
                    z = z + 1;
                }//zu11
                else{//offen12
                    System.out.println(z+1);
                    z = z + 1;
                }//zu12
            }//zu10
        }//zu9
    }//zu2
}//zu1

我得到的错误是:

zael.java:22: error: cannot find symbol
                    System.out.println(pref);
                                       ^
  symbol:   variable pref
  location: class zael
zael.java:24: error: cannot find symbol
                    System.out.print(suff);
                                     ^
  symbol:   variable suff
  location: class zael
zael.java:28: error: cannot find symbol
                    System.out.println(pref);
                                       ^
  symbol:   variable pref
  location: class zael
3 errors

3 个答案:

答案 0 :(得分:1)

问题是这一行: System.out.println(pref);

您尚未在此范围内定义pref。字段pref仅在main方法中定义,但无法在其外部读取,因此在主方法之外也必须定义pref字段。 (您可以将其定义为静态成员字段以减少代码重复。)

答案 1 :(得分:1)

如果您缩进代码,很容易看到:

    if (p.equals("Y")) {//offen3
        System.out.println("Gib deinen Prefix an!");
        String pref = System.console().readLine();
    }//zu3

在上面的代码块中,变量pref变得无用,因为一旦块关闭,它的范围就会结束。

    if (s.equals("Y")) {//offen4
        System.out.println("Gib deinen Suffix an!");
        String suff = System.console().readLine();
    }//zu4

对于上面的变量suff,这是相同的。

因此,您会在以下行中收到错误:

System.out.println(pref);
System.out.print(z + 1);
System.out.print(suff);

解决这个问题的最简单方法是在if块之外定义两个变量,如下所示:

String pref = null;
if (p.equals("Y")) {//offen3
    System.out.println("Gib deinen Prefix an!");
    pref = System.console().readLine();
}//zu3

答案 2 :(得分:0)

这与变量的范围有关:

来自 Java语言规范Section 6.3

  

声明的范围是程序的一个区域,只要它是可见的,就可以使用简单的名称引用声明声明的实体。

     

当且仅当声明的范围包含该点时,声明在程序中的特定点被称为范围

所以,分析你的程序......

  1. 名为String的{​​{1}}变量在范围#3中声明。因此,它可以被自己和嵌套在其中的其他范围访问。
  2. 当您尝试访问第22和28行中范围#4中的pref变量时。
  3. 变量pref也一样。
  4. 现在,如何修复它?

    在您需要的范围内声明(并初始化)变量 。例如,您需要范围#4中的suff变量。因此,请在pref方法中声明它,即范围#2。

    然后将您的main()声明修改为:

    if (p.equals ("Y")){...