0

我正在尝试制作一个 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"       
}

}

4

2 回答 2

0

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

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() < 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();

也许您可以找到更好的条件,但这应该就足够了。

于 2013-11-13T21:58:46.740 回答
0

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

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));
于 2013-11-13T22:01:11.987 回答