【问题标题】:Java Array index out og bounds Exception when getting input in java在java中获取输入时Java数组索引超出范围异常
【发布时间】:2012-10-20 12:53:11
【问题描述】:

在 Java 中获取字符串输入时,我得到了 Java ArrayIndexOutOfBoundsException。请帮我。这是我的代码:我编辑了我的代码以使用:它说“线程中的异常”main”java.lang.ArrayIndexOutOfBoundsException:1 在 solution2.Solution.main(Solution.java:27) "

import java.util.Scanner;

公共类解决方案{

public static void main(String[] args){

    Scanner scan = new Scanner(System.in);
    String str = scan.next();
    String strarr[] = str.split(",");
    String temp = strarr[0];
    String temparr[] = temp.split(".");
    String temp1 = strarr[1];
    String temparr1[] = temp.split(".");
    int x1 = Integer.parseInt(temparr[0]);
    int x2 = Integer.parseInt(temparr[1]);
    int y1 = Integer.parseInt(temparr1[0]);
    int y2 = Integer.parseInt(temparr1[1]);
    System.out.println(distance(x2,x1,y2,y1));

}

public static int distance(int x1,int y1,int x2,int y2){

    int xlen=x2-x1;
    int ylen=y2-y1;

    return (xlen+ylen)*10-(ylen*5);     

}

}

【问题讨论】:

  • 也许您应该在索引数组之前测试length()
  • (礼貌地指出程序的哪一行出现了错误。)
  • 不仅有礼貌,而且很有必要,因为有很多机会提出上述例外情况。
  • 好吧,您的代码没有任何验证,请给我们示例您要输入的内容。
  • 输入:1.2,2.4 输出:整数值,例如 1,2,2,4 。格式很重要

标签: java string exception input


【解决方案1】:

String.split()正则表达式中的点字符需要转义,否则任何字符都会被匹配:

String temparr[] = temp.split("\\.");

对于temparr1,我认为您的意思是使用temp1

String temparr1[] = temp1.split("\\.");

如果您期望双精度值,您可以改用 Scanner.nextDouble()

【讨论】:

  • 你能告诉我如何使用“:”进行分割
  • 不用转义:,直接用str.split(":")
  • 改变问题的性质对以后希望阅读本文的人没有帮助。现在的答案与现有的问题不对应。我会说将原始代码放回问题中并发布一个新问题。 :)
  • 感谢您恢复原Q。
【解决方案2】:

您是否注意到您将temp.split() 分配给temparr1 而不是temp1.split()

另外,split 接受正则表达式作为参数,而正则表达式 . 几乎可以匹配任何内容。所以,你应该纠正它。

我假设,由于没有任何东西可以反驳我的猜测,您正在解析格式为 1.2,3.4 的输入,其中 1、2、3 和 4 是任意数字。

除此之外,Scanner.next 读入下一个 token,这意味着它只会从“1.2,3.4”中读取“1”。你必须使用Scanner.nextLine

【讨论】:

  • 你能告诉我如何使用“:”进行分割
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多