因此,当我的代码运行时,一旦我尝试输入第一个值,我就会收到此错误。
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Exercise_5.main(Exercise_5.java:30)
以下是代码,错误显示在ls[i][j] = tempString.charAt(0);
import java.util.Scanner;
public class Exercise_5 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = 0;
System.out.println("Enter number n:");
n = input.nextInt();
char[][] ls = new char[n][n];
String tempString = "";
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < n ; j++)
{
System.out.println("Enter the letter for " + i + "," + j);
tempString = input.nextLine();
if(tempString.length() > 1)
{
System.out.println("Invalid input");
}
else
{
ls[i][j] = tempString.charAt(0);
}
}
}
boolean latinSquare = true;
for(int i = 0 ; i < n && latinSquare ; i++)
{
for(int j = 0 ; j < n && latinSquare ; j++)
{
char element = ls[i][j];
for(int k = j + 1 ; k < n && latinSquare ; k++)
{
if(ls[i][j] == element)
{
latinSquare = false;
}
}
for(int k = i + 1 ; k < n && latinSquare ; k++)
{
if(ls[i][j] == element)
{
latinSquare = false;
}
}
}
}
if(latinSquare)
{
System.out.println("The square is a latin square");
}
else
{
System.out.println("The square is not a latin square");
}
}
}
对于我的生活,我无法弄清楚它为什么会发生。
答案 0 :(得分:0)
n = input.nextInt();
此处nextInt
仅使用int
值,跳过新行字符。
tempString = input.nextLine();
此处,tempString
将使用新的换行符。所以当你到达这一行时:
ls[i][j] = tempString.charAt(0);
你会得到这个例外。
尝试在之前添加另一个nextLine
,您实际上已从用户读取字符串,因此它将使用新行字符。
此外,您的验证毫无意义,因为您正在检查长度是否大于零,如果没有,则尝试访问0位置的字符,该字符不存在。