无法通过java解析字符串

无法通过java解析字符串,java,arrays,string,loops,random,Java,Arrays,String,Loops,Random,我正在尝试制作一个由不同随机字母组成的12乘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();

我正在尝试制作一个由不同随机字母组成的12乘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"       
}
import java.util.Scanner;
导入java.util.array;
导入java.util.Random;
公共课播放区{
公共静态void main(字符串[]args){
int N=letters.length();//此处错误“无法解析字母”
随机r=新随机();
扫描仪输入=新扫描仪(System.in);
System.out.println(“您想要多少个区域(2-4)”;
int region=input.nextInt();
如果(区域==4){
字符串字母=“EFGH”;
}
如果(区域==3){
字符串字母=“EFG”;
}
else if(区域==2){
字符串字母=“EF”;
}
else{System.out.println(“您输入了错误的值,请重试…”);
}
字符[][]字母=新字符[12][12];
对于(int j=0;j

}

删除导致错误的行,改为如下操作:

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循环,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();
字符串字母=”;
while(字母.length()<2){
如果(区域==4){
字母=“EFGH”;
}
如果(区域==3){
字母=“EFG”;
}
else if(区域==2){
字母=“EF”;
}
否则{
System.out.println(“您输入了错误的值,请重试…”);
}
}
int N=字母.length();

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

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

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

错误发生在哪里?字母是什么?我没有看到任何
字母
字符串
初始化。我认为您得到了NPE。发布整个错误/异常文本,包括堆栈跟踪。这里:int N=letters.length();和:字母[i][j]=字母.charAt(r.nextInt(N))<代码>字母
在使用前未声明或初始化。感谢帮助turbo:D它现在运行得很好。@Tommon如果此答案对您有帮助,请单击答案左上角分数下的复选标记接受它:)