首页 > 解决方案 > 不使用 for 循环打印出数组的最后一个数字

问题描述

结果给了我这个,但没有打印出最后一个 int (200)。我在 main 方法中添加了一些随机数,并通过使用 for 循环将它们按顺序排列。但是,它完全忽略了最后一个(最大)整数,即 200。我该如何解决这个问题?

0: 13
1: 21
2: 25
3: 44
4: 50
5: 63
6: 88
7: 99
8: 100

这是我添加随机整数的主要方法。


    public static void main(String[] args) {

        SortedIntList myList = new SortedIntList(10);

        myList.add(100);
        myList.add(50);
        myList.add(200); // Does not print this line
        myList.add(25);
        myList.add(13);
        myList.add(63);
        myList.add(21);
        myList.add(99);
        myList.add(88);
        myList.add(44);
        System.out.println(myList);
    }
}

这是用于打印按从小到大排序的所有整数的 for 循环方法。它将它们按顺序排列得很好,只是由于某种原因没有添加 200。

  public void add(int value) {
        if (numElements == list.length) {
            System.out.println("Can't add, list is full");
        } else {
            if (numElements == 0) {
                list[numElements] = value;
                numElements++;
            } else {
                int oldValue = 0;
                boolean flag = false;
                for (int i = 0; i < numElements; i++) {
                    if (value < list[i] && !flag) {
                        oldValue = list[i];
                        list[i] = value;
                        flag = true;
                        if (numElements + 1 != list.length) {
                            numElements++;
                        }
                    } else if (flag) {
                        int temp = list[i];
                        list[i] = oldValue;
                        oldValue = temp;
                        if (i == list.length - 1) {
                            list[i + 1] = temp;
                            numElements++;
                            break;
                        }
                        if (temp == 0) {
                            break;
                        }
                        if (numElements + 1 != list.length) {
                            numElements++;
                        }
                    }
                   else if (i == numElements - 1) {
                        list[numElements] = value;
                        if (numElements + 1 != list.length) {
                            numElements++;
                            break;
                        }
                    }
                }
            }
        }
    }

这就是 toString 方法的样子

 public String toString()
    {
        String returnString = "";
        for (int i = 0; i < numElements; i++) {
            returnString += i + ": " + list[i] + "\n";
        }

        return returnString;
    }

标签: javaarraysfor-loopprinting

解决方案


我仔细查看了您的add实现,发现您想要实现的目标很复杂。一世

  • 删除了很多代码
  • 重命名你的flag变量
  • 将循环上限从 更改为<<=因为您的列表应该增加一
  • 改变了最后else if
  • 简化了numElements++应该立即发生的事情,其他一切都是/已经是很大的代码气味

以结束

public void add(int value) {
    if (numElements == list.length) {
        System.out.println("Can't add, list is full");
    } else {
        if (numElements == 0) {
            list[numElements] = value;
        } else {
            int oldValue = 0;
            boolean moveUpward = false;
            for (int i = 0; i <= numElements; i++) {
                if (value < list[i] && !moveUpward) {
                    oldValue = list[i];
                    list[i] = value;
                    moveUpward = true;
                } else if (moveUpward) {
                    int temp = list[i];
                    list[i] = oldValue;
                    oldValue = temp;
                } else if (i == numElements) {
                    list[i] = value;
                }
            }
        }
        numElements++;
    }
}

现在正确输出

0:13 1:21 2:25 3:44 4:50 5:63 6:88 7:99 8 :
100 9 :200








推荐阅读