Java 为什么我的索引超出了界限?
我的代码出现以下错误: 索引越界 为什么会导致这个错误Java 为什么我的索引超出了界限?,java,Java,我的代码出现以下错误: 索引越界 为什么会导致这个错误 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);
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);
}
publicstaticvoidmain(字符串[]args){
Map hashMap=新hashMap();
System.out.println(“首先输入您的年数,然后输入姓名:”);
扫描仪sken=新扫描仪(System.in);
而(sken.hasNext()&&!sken.equals(“退出”)){
String[]line=sken.nextLine().split(“,”);
字符串名称=行[1];
int howOld=Integer.parseInt(第[0]行);
hashMap.put(多大,名称);
}
System.out.println(“输入完成!”);
System.out.println(“HeshMap输入:”);
System.out.println(hashMap+“\n”);//
上面这一行是罪魁祸首,您正在访问索引1
,而没有检查它是否存在
如果输入字符串不包含任何逗号作为分隔符,
,则肯定会出现此异常,因此最好在访问之前进行检查
if(line.length==1){ // then Access index
}
异常原因
以下行出现的原因java.lang.ArrayIndexOutOfBoundsException:1
因为您试图sken.nextLine().split(,”)
I输入的字符串不包含,
,其中无法获取行[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);
}
更多
可能对您有帮助;)
始终对处理此类异常的try-catch处理程序进行检查
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
}
什么是!sken.equals(“退出”)
?你不能将扫描器
与字符串
进行比较-这永远都是正确的。哦,你是对的,必须先解决这个问题。虽然在这种情况下似乎没有必要,但当你遇到这样的异常时,你应该将调用堆栈添加到你的帖子中。帮助我们帮助你。并且你应该就如何定位打开一个单独的问题这不是HashMap。谢谢你的回答,但我需要做什么呢?我的意思是,你知道了,我想以某种方式将行拆分为整数和字符串,然后用HashMap编写。我认为你的排序映射会起作用。你为什么不一个接一个地询问年龄而不是名称呢。这减少了出错的机会这主意不错,但我喜欢现在的方式:D。它起作用了现在,在“退出”命令下,它会打印出所有的内容,谢谢你,我希望你用同样的方式,试着给出示例输入。因为我逐行阅读你的while循环,看看什么应该是你的有效输入!Sarz制作了一个全新的while循环,它做得很好:)
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;
}
}
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
}