我的代码给出了这个错误:
索引越界
为什么会导致此错误?
public static void main(String[] args) {
Map<Integer, String> hashMap = new HashMap<>();
System.out.println("First input number of your years then name:");
Scanner sken = new Scanner(System.in);
while (sken.hasNext() && !sken.equals("exit")) {
String[] line = sken.nextLine().split(",");
String name = line[1];
int howOld = Integer.parseInt(line[0]);
hashMap.put(howOld, name);
}
System.out.println("Input Complete!");
System.out.println("HeshMap input:");
System.out.println(hashMap + "\n"); // <-- this line
Map<Integer, String> treeMap = new TreeMap<>(hashMap);
System.out.println("Sorted by years:");
System.out.println(treeMap);
}
另外,我确信我用注释标记的行不能正确打印,打印HashMap的正确方法是什么?
答案 0 :(得分:2)
例外原因
因为您尝试java.lang.ArrayIndexOutOfBoundsException: 1
我发现sken.nextLine().split(",");
因为您输入的字符串中不包含,
,因此您无法获得line[1];
String[] line = sken.nextLine().split(",");
如何重构代码
根据您的逻辑,您的输入应包含,
字符,并且退出将像这样工作。
while(sken.hasNext())
{
String thisLine = sken.nextLine();
if(thisLine.equals("exit")){
break;
}
String[] line =thisLine.split(",");
String name= line[1];
int howOld= Integer.parseInt(line[0]);
hashMap.put(howOld, name);
}
更多强>
可能对您有所帮助;)
while(true)
{
System.out.println("Please Enter Age:");
int howOld = sken.nextInt();
System.out.println("Please Enter Name:");
String name = sken.next();
String thisLine = sken.nextLine();
hashMap.put(howOld, name);
System.out.println("Do you want the results (Y/N)?");
String more= sken.next();
if(more.equals("N") || more.equals("n")){
break;
}
}
答案 1 :(得分:0)
String name= line[1];
以上这一行是罪魁祸首,您正在访问索引1
,而不检查它是否存在。
如果您的输入字符串不包含任何逗号作为分隔符,
,那么您肯定会得到此异常,因此最好在访问之前进行检查
if(line.length==1){ // then Access index
}
答案 2 :(得分:0)
总是有一个try catch handler检查来处理这样的异常。
try{
String[] line = sken.nextLine().split(",");
String name= line[1];
int howOld= Integer.parseInt(line[0]);
hashMap.put(howOld, name);
} catch (ArrayIndexOutOfBoundsException iobe) {
// do something here
}