2

在输入整数后输入字符串“s”时出现此错误。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at oneB.change(oneB.java:4)
    at oneB.main(oneB.java:26)

以下是代码:(请注意,代码仍然是完整的,我已经输入了一些打印语句进行检查)

import java.util.Scanner;
public class oneB {
    public static String change(int n, String s, String t) {

        if (s.charAt(0) == 'R') {
            return onetwo(s);
        }
        return s;
    }
    private static String onetwo(String one) {
        int c = one.indexOf('C');
        System.out.print(c);
        char[] columnarray = new char[one.length() - c - 1];
        for (int i = c + 1; i < one.length(); i++) {
            columnarray[i] = one.charAt(i);
        }
        int columnno = Integer.parseInt(new String(columnarray));
        System.out.print(columnno);
        return one;

    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System. in );
        int n = in .nextInt();
        String s = in .nextLine();
        String t = in .nextLine();
        System.out.print(change(n, s, t));
    }

}
4

6 回答 6

6

该调用in.nextInt()将结束行字符留在流中,因此以下调用会in.nextLine()产生一个空字符串。然后你将一个空字符串传递给一个引用它的第一个字符的函数,因此你得到了异常。

于 2013-09-20T12:40:18.147 回答
1

这是我调试它的方法:

  • 您在第 4 行得到一个StringIndexOutOfBoundsException索引为零的值。

  • 这意味着您在调用时正在操作的字符串s.charAt(0)是空字符串。

  • 这意味着s = in.nextLine()设置s为空字符串。

这个怎么可能?好吧,发生的事情是前面的nextInt()调用读取了一个整数,但它留下了整数后面的字符未使用。因此,您nextLine()正在阅读该行的其余部分(直到行尾),删除换行符,然后将其余部分给您……这是一个空字符串。

在尝试in.readLine()将该行读入s.

于 2013-09-20T12:42:21.410 回答
1

该问题的另一种解决方案是nextLine()使用 just而不是next()

        int n = in .nextInt();
        String s = in .next();
于 2013-09-20T13:00:23.650 回答
0

看起来s是一个空的 String ""

于 2013-09-20T12:39:47.840 回答
0
   for (int i = c + 1; i < one.length(); i++) {
        columnarray[i] = one.charAt(i);   // problem is here.
    }

您需要从 0 开始数组索引。但是您从 c + 1 开始

    for (int i = c + 1,j=0; i < one.length(); i++,j++) {
        columnarray[j] = one.charAt(i);
     }
于 2013-09-20T12:47:59.837 回答
0

问题是当你按下回车键时,你的 int 后面跟着一个 '\n' 字符。只需像这样修改代码:

public static void main(String[] args) {
    Scanner in = new Scanner(System. in );
    int n = in .nextInt();
    in.nextLine(); //This line consume the /n afer nextInt
    String s = in .nextLine();
    String t = in .nextLine();
    System.out.print(change(n, s, t));
}
于 2013-09-20T12:48:04.060 回答