【问题标题】:Can't delete the Array if it's already found(Array Searching Sorting)如果已经找到数组,则无法删除(数组搜索排序)
【发布时间】:2015-02-09 16:08:56
【问题描述】:

我的工作是创建一个程序,用户将输入一个数字,它会搜索输入的数字 在我的阵列存储中;如果它在那里,它会说“找到”并显示数组中的所有元素并删除找到的值;

是这样的:

我已经完成了我的代码,但是有一个问题; 如果找到它不会显示数组的所有元素并且不会删除它。 发生错误

顺便说一下,这是我的代码:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int[] ArrayApp = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
            16, 17, 18, 19, 20 };

    System.out.println("ArrayList:");
    for (int x = 0; x < ArrayApp.length; x++) {
        System.out.print(ArrayApp[x] + " ");
    }
    System.out.println();
    System.out.print("Enter a number: ");
    int num = input.nextInt();
    int x;
    for (x = 0; x < ArrayApp.length; x++) {
        if (ArrayApp[x] == num) {
            break;
        }
    }
    if (x == ArrayApp.length) {
        System.out.println("Cant find: " + num);
    } else {
        System.out.println("Found");
    }

    for (int k = x; k < ArrayApp.length; k++) {
        ArrayApp[k] = ArrayApp[k + 1];

    }

    for (x = 0; x < ArrayApp.length; x++) {
        System.out.print(ArrayApp[x] + " ");
    }

}

那么你能帮我找出我的代码有什么问题吗?

【问题讨论】:

    标签: java arrays sorting search


    【解决方案1】:

    ArrayApp[k] = ArrayApp[k + 1]; 在 k = ArrayApp.lenngth-1 时会抛出 ArrayIndexOutOfBounds 异常,因为 k+1 会超出范围。

    你应该改变范围:

    for (int k = x; k < ArrayApp.length - 1; k++) {
        ArrayApp[k] = ArrayApp[k + 1];
    }
    

    当打印输出数组时,如果你删除了一个元素,你不想打印最后一个元素,因为它会被打印两次(因为数组的长度不会改变)。

    int length = ArrayApp.length;
    if (x < ArrayApp.length) // adjust the number of elements to be printed after
                             // one element was removed
        length--;
    for (x = 0; x < length; x++) {
        System.out.print(ArrayApp[x] + " ");
    }
    

    【讨论】:

    • 感谢您的更正。是的,它两次打印最后一个元素。我该如何调试它?
    • @repsajznav 我的答案中的第二个 sn-p 代码会阻止它打印最后一个元素两次。
    • 嗯,它有效!谢谢你..提前圣诞快乐! :D
    【解决方案2】:

    我认为下面一行是问题所在。

    ArrayApp[k] = ArrayApp[k + 1];
    

    您正在尝试访问 k+1,如果 k = arraylength - 1,访问将导致 ArrayIndexOutOfBoundException 因为您尝试访问具有可用索引的元素(即数组索引是0 到 length-1 )

    【讨论】:

      【解决方案3】:

      改变你的 for 循环

      for (int k = x; k < ArrayApp.length; k++) {
          ArrayApp[k] = ArrayApp[k + 1];
      }
      

      for (int k = x; k < ArrayApp.length - 1; k++) {
          ArrayApp[k] = ArrayApp[k + 1];
      }
      ArrayApp[k] = -1;//reset last element to -1 as you removed the xth element you found.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        相关资源
        最近更新 更多