【问题标题】:Why can't I properly remove an item from this array?为什么我不能从这个数组中正确删除一个项目?
【发布时间】:2014-11-26 22:03:00
【问题描述】:

当我删除一个项目时,我将它从数组中删除,然后我打印一条消息,表明它已被删除。

我知道由于数组没有排序,删除一个项目的最简单方法就是将当前最后一个项目移动到它的位置,然后减少项目的数量。

我做错了什么?我该如何解决?

public static int removeBall(String[] hookPotentialArray, String[] nameBallArray, int[] ballWeightArray, int count) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Please enter the name of the ball you would like to remove: ");
    String name = keyboard.nextLine();
    boolean ballRemoval = false;
    for (int i = 0; i < count; i++) {
        if (name.compareToIgnoreCase(nameBallArray[i]) == 0 && !ballRemoval) {

            nameBallArray[i] = nameBallArray[count - 1];
            ballWeightArray[i] = ballWeightArray[count - 1];
            hookPotentialArray[i] = hookPotentialArray[count - 1];

            ballRemoval = true;
            count--;

            System.out.println("The ball you selected to be removed "
                    + "has been removed.");
            System.out.println("");
        }
    }
    return count;
}

【问题讨论】:

  • 由于 Java 数组不是动态的,我不知道你在问什么。
  • 有什么问题?这是否无法编译,是否崩溃,是否运行但没有预期的行为,是什么?
  • @letsjak 在您对这个问题的suggested edit 中,您尝试将&lt; 替换为HTML 字符文字。一般来说,您不必这样做,因为它会在编辑帖子时降低可读性。
  • (1) 你应该使用break 退出搜索 (2) 你应该在删除最后一项时添加特殊检查 (3) 你应该记住,java 数组实际上不会缩小,所以你需要保持count 始终正确并在使用中

标签: java arrays


【解决方案1】:

最好创建一个Ball 类来存储名称、权重和挂钩潜在值,并使用List 来存储Ball 对象。 Lists 也有自己的方法来添加和删除项目。

【讨论】:

    【解决方案2】:

    (1)你应该使用break退出搜索

    (2) 你应该在删除最后一项时添加特殊检查

    (3) 你应该记住,java 数组实际上不会缩小,所以你需要保持计数始终正确并在使用中

    如下:

    package tests.StackOverflow;
    
    public class q27159679 {
    
        public static void main(String[] args) {
    
            String[] hookPotentialArray = {"alpha", "beta", "gamma", "delta"}; 
    
            String[] nameBallArray = {"A", "B", "C", "D"}; 
    
            int[] ballWeightArray = {11, 12, 13, 14};
    
            int count = hookPotentialArray.length;
    
            printBalls(nameBallArray, count);
    
            count = removeBall(hookPotentialArray, nameBallArray, ballWeightArray, count, "B");
    
            count = removeBall(hookPotentialArray, nameBallArray, ballWeightArray, count, "D");
    
    
        }
    
    
        public static int removeBall(String[] hookPotentialArray, String[] nameBallArray, int[] ballWeightArray, int count, String name) {
    
            System.out.println("Removing ball " + name);
    
            for (int i = 0; i < count; i++) {
                if (name.compareToIgnoreCase(nameBallArray[i]) == 0 ) {
    
                    if( i < count - 1) {
                        nameBallArray[i] = nameBallArray[count - 1];
                        ballWeightArray[i] = ballWeightArray[count - 1];
                        hookPotentialArray[i] = hookPotentialArray[count - 1];
                    }
    
                    count--;
    
                    System.out.println("The ball you selected to be removed "
                            + "has been removed.");
                    printBalls(nameBallArray, count);
                    System.out.println("");
    
                    break;
                }
            }
            return count;
        }
    
        public static void printBalls(String[] nameBallArray, int count) {
            System.out.print("The remaining balls: ");
            for(int i=0; i<count; ++i) {
                System.out.print(nameBallArray[i] + " ");
            }
            System.out.println("");
        }
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2022-01-01
      • 2020-07-09
      相关资源
      最近更新 更多