【问题标题】:String cannot be resolved java字符串无法解析java
【发布时间】:2013-11-26 17:21:55
【问题描述】:

我正在尝试制作一个 12 x 12 表,其中包含不同的随机字母,但用户可以选择它是否包含 4 个不同的字母,3 或 2...但是我收到一个错误,即字符串无法解析,我不知道为什么...请帮助...

import java.util.Scanner;
import java.util.Arrays;
import java.util.Random;
public class PlayingArea {
public static void main(String[] args){
int N = letters.length();//error here "letters cannot be resolved"
    Random r = new Random(); 
    Scanner input = new Scanner(System.in); 
    System.out.println("How many regions would you like (2- 4)");
    int region = input.nextInt();
    if (region == 4){
        String letters= "EFGH"; 
    }
    if (region == 3){
        String letters= "EFG"; 
    }
    else if (region == 2){
        String letters= "EF"; 
    }
    else { System.out.println("You inputed a wrong value, try again...");

    }
    char [][] letter = new char[12][12]; 


    for (int j = 0; j < letter.length; j++){

        for(int i=0; i < letter.length; i++) {
            letter[i][j] = letters.charAt(r.nextInt(N)) ; 
        }
    }       

    for (char[] letterRow : letter) 
    System.out.println(Arrays.toString(letterRow)); //error here "letters cannot be resolved"       
}

}

【问题讨论】:

  • 哪里出错了?
  • 什么是letters?我没有看到任何 letters String 初始化。我认为您正在获得 NPE。
  • 发布整个错误/异常文本,包括堆栈跟踪。
  • 这里:int N = letters.length();和: 字母[i][j] = letters.charAt(r.nextInt(N)) ;
  • letters 在使用前未声明或初始化。

标签: java arrays string loops random


【解决方案1】:

删除导致错误的行并改为这样做:

String letters;

if (region == 4){
    letters= "EFGH"; 
}
if (region == 3){
    letters= "EFG"; 
}
else if (region == 2){
    letters= "EF"; 
}
else { 
    System.out.println("You inputed a wrong value, try again...");
}
int N = letters.length();

您收到错误的原因是字母尚不存在,因此您无法在您所在的位置致电letters.length()。你应该得到一个 NullPointerException。

我还建议处理不输入 2、3 或 4 的用户,因为无论如何代码都会出错。您可以将 if/else 语句放在 while 循环中,而 letters.length() &lt; 2 例如:

String letters = "";
while(letters.length() < 2) {
    if (region == 4){
        letters= "EFGH"; 
    }
    if (region == 3){
        letters= "EFG"; 
    }
    else if (region == 2){
        letters= "EF"; 
    }
    else { 
        System.out.println("You inputed a wrong value, try again...");
    }
}
int N = letters.length();

也许你能找到更好的条件,但这应该足够了。

【讨论】:

  • 感谢 turbo 的帮助 :D 现在可以完美运行了。
  • @Tommon 如果这个答案对你有帮助,请点击答案左上角分数下的复选标记接受它:)
【解决方案2】:

您的字母字符串超出范围。在设置之前尝试初始化它。

if (region == 4){
    String letters= "EFGH"; 
}
System.out.println(letters.charAt(0));

会产生错误,因为字母是在 if 语句的范围内定义的。如果您想要以下内容,使其在外部可用。

String letters = "";
if (region == 4){
    letters= "EFGH"; 
}
System.out.println(letters.charAt(0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2015-10-14
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多