输入第一个值时,为什么我的代码中出现异常?

时间:2014-11-23 21:11:40

标签: java eclipse

因此,当我的代码运行时,一旦我尝试输入第一个值,我就会收到此错误。

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

的第30行
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");
        }
    }

}

对于我的生活,我无法弄清楚它为什么会发生。

1 个答案:

答案 0 :(得分:0)

n = input.nextInt();

此处nextInt仅使用int值,跳过新行字符。

tempString = input.nextLine();

此处,tempString将使用新的换行符。所以当你到达这一行时:

ls[i][j] = tempString.charAt(0);

你会得到这个例外。

尝试在之前添加另一个nextLine ,您实际上已从用户读取字符串,因此它将使用新行字符。

此外,您的验证毫无意义,因为您正在检查长度是否大于零,如果没有,则尝试访问0位置的字符,该字符不存在。