我遇到了问题。我写了一个程序,它允许我计算一个特定的数字,并能够使用前缀和后缀。我需要这个来构建另一个程序。 这是我的代码(// 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
答案 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:
声明的范围是程序的一个区域,只要它是可见的,就可以使用简单的名称引用声明声明的实体。
当且仅当声明的范围包含该点时,声明在程序中的特定点被称为范围
。
String
的{{1}}变量在范围#3中声明。因此,它可以被自己和嵌套在其中的其他范围访问。pref
变量时。pref
也一样。在您需要的范围内声明(并初始化)变量 。例如,您需要范围#4中的suff
变量。因此,请在pref
方法中声明它,即范围#2。
然后将您的main()
声明修改为:
if (p.equals ("Y")){...