gpt4 book ai didi

java - 为什么最后一个数字不打印?

转载 作者:行者123 更新时间:2023-11-30 05:54:23 25 4
gpt4 key购买 nike

由于某种原因,Arraylist 中剩下的最后一个数字不会打印,我不明白为什么。请帮忙。这是结果 [88, 10, 6, 4, 2]

package com.company;

import java.util.ArrayList;
import java.util.Collections;

public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(4);
list.add(2);
list.add(6);
list.add(1);
list.add(88);
list.add(10);

ArrayList<Integer> tmp = new ArrayList<>();
int tmpNum = list.get(0);
int index = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) >= tmpNum) {
index = i;
tmpNum = list.get(i);
}

if (i == list.size() - 1) {
tmp.add(tmpNum);
list.remove(index);
i = 0;
index = 0;
tmpNum = list.get(0);
}
}
System.out.println(tmp);
}
}

最佳答案

添加

tmp.add(tmpNum);

在循环之后添加最后一个数字。

    for (int i = 0; i < list.size(); i++) {
if (list.get(i) >= tmpNum) {
index = i;
tmpNum = list.get(i);
}

if (i == list.size() - 1) {
tmp.add(tmpNum);
list.remove(index);
i = 0;
index = 0;
tmpNum = list.get(0);
}
}
tmp.add(tmpNum);
System.out.println(tmp);

输出:

[88, 10, 6, 4, 2, 1]

未添加最后一个数字的原因是,一旦 list 仅包含最后一个元素(在上次调用 list.remove(index) 之后),您将 i 设置为 0,但随后循环的 i++ 将其递增到 1,因此循环结束而不添加tmp 的最后一个数字。

替代解决方案:

for (int i = 0; i < list.size(); i++) {
System.out.println (list.size());
if (list.get(i) >= tmpNum) {
index = i;
tmpNum = list.get(i);
}

if (i == list.size() - 1) {
System.out.println ("add " + tmpNum);
tmp.add(tmpNum);
System.out.println ("remove " + list.get (index));
list.remove(index);
i = -1; // this will cause the loop's i++ to set i to 0
index = 0;
tmpNum = Integer.MIN_VALUE; // since you need to find the max remaining number
}
}

关于java - 为什么最后一个数字不打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53431420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com