我们必须创建一个ArrayList,只要用户想要它就会获取值,然后将它们按顺序排列。这类问题的其他问题通常使用Collections.sort作为解决方案,但我宁愿使用其他东西来更好地理解ArrayLists。
我的程序正在取值并打印出我预先添加到数组中的值,但是发生了一些非常奇怪的事情,它打印出用户输入的数字的重复数据,而不是按顺序排列。
import java.util.Scanner;
import java.util.ArrayList;
public class Orderedarraylist {
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(7);
list.add(178);
list.add(12);
list.add(9);
System.out.println("Enter any number.");
int n = scan.nextInt();
list.add(n);
System.out.println("Enter any number.");
int b = scan.nextInt();
list.add(b);
while ((n >= 0) && (b >= 0)) {
System.out.println("Enter another number or press 2 to exit.");
int x = scan.nextInt();
if (x == 2) {
break;
}
for (int i = 0; i < list.size() - 1; i++) {
if (x > list.get(i)) {
list.add(x);
} else {
i++;
}
}
}
//something is happening in here that prints multiples of the numbers. it doesn't print the first set of values that way
//but it also doesn't print them in order..
System.out.println("Here is your list: " + list);
}
}
答案 0 :(得分:1)
您不需要使用Collections.sort()
&#39;这里。您只想维护订单,并list interface
注意并删除else i++.
如果x大于列表中的多个元素,那么您的代码会多次添加x
,这就是您获得的原因在这里重复。
if (x == 2) break;
for (int i = 0; i < list.size() - 1; i++) {
if (x > list.get(i)) {
list.add(i, x);
break;
}
}
答案 1 :(得分:0)
您使用add(x)调用将所有数字添加到列表末尾。相反,您需要使用add(i,x)将其插入当前位置。
添加后,您需要突破循环。相反,您将重复添加到列表的末尾。
所以你想要:
if(x>list.get(i)) {
list.add(i, x);
break;
}