【问题标题】:How to handle array out of bound exception如何处理数组越界异常
【发布时间】:2016-09-22 20:54:51
【问题描述】:

我正在编写获取 2 个字符串的函数。 每个字符串都代表某事的版本。

例如:

字符串 var1 = "1.1.1";

字符串 var2 = "1.1.2";

并返回哪个字符串是较新的版本。

我的代码:

   public  void main(String var1, String var2) {

    String[] arrayA = var1.split("\\.");

    String[] arrayB = var2.split("\\.");

    for (int i = 0; i < arrayA.length; i++) {

            Integer number1 = Integer.parseInt(arrayA[i]);

            Integer number2 = Integer.parseInt(arrayB[i]);

            if (number1.equals(number2)) {

                textView.setText("arrays equal");

            } else if (number1 > number2) {

                textView.setText("array A newer version");

                break;

            } else if (number2 > number1) {

                textView.setText("array B newer version");

                break;
            }  
    }

到目前为止一切正常。

当数组长度不同时,我的问题就开始了

(我总是将更短的数组转换为更长的数组)

如果我露营 var1 = "2.3";到 var2="3.3.3";我得到了正确的答案。

但如果我露营 var1 = "2.3";到 var2 = "2.3.1";

我总是得到“平等”。

有什么建议可以解决吗?

【问题讨论】:

  • 您的代码中有错别字,请先修正。 (示例 -> 字符串 var2 = "1.1.2)
  • 首先,您的退出条件应该检查​​两个数组的长度。如果到循环结束时您还没有确定哪个更新,并且它们的长度不同,则较长的版本更新。

标签: java arrays exception exception-handling indexoutofboundsexception


【解决方案1】:

您可以将您的变量添加到一个列表中,然后简单地使用 java.util.Collections 中的排序方法,它会为您进行比较。示例

public static void main(String var1, String var2){ 

    List<String> varList = new ArrayList<String>();
    varList.add(var1); 
    varList.add(var2); 

    java.util.Collections.sort(varList);
    System.out.println("designation of newer version is: " + varList.get(1));
}

【讨论】:

    【解决方案2】:
    int length = Math.min(arrayA.length, arrayB.length);
    for (int i = 0; i < length; i++) {
    

    【讨论】:

      【解决方案3】:

      请试试这个:

      public  void main(String var1, String var2) {
      
          String[] arrayA = var1.split("\\.");
      
          String[] arrayB = var2.split("\\.");
          int length = 0;
          if (arrayA.length > arrayB.length) {
              length = arrayA.length;
          } else {
              length = arrayB.length;
          }
          int check = 0;
          for (int i = 0; i < length; i++) {
              Integer number1 = 0, number2 = 0;
              if (arrayA.length > i) {
                  number1 = Integer.parseInt(arrayA[i]);
              }
              if (arrayB.length > i) {
                  number2 = Integer.parseInt(arrayB[i]);
              }
              if (number1.equals(number2)) {
                  check = 0;
              } else if (number1 > number2) {
                  check = 1;
                  break;
      
              } else if (number2 > number1) {
                  check = 2;
                  break;
              }
          }
          switch (check) {
          case 0:
              System.out.println("arrays equal");
              break;
          case 1:
              System.out.println("array A newer version");
              break;
          case 2:
              System.out.println("array B newer version");
              break;
          }
      
      }
      

      【讨论】:

      • 非常感谢。代码按预期工作。正是我想要的。
      • @sollo 很高兴听到这个消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多