我正在从事一项学术任务,我已经完成了所有工作,但我想知道为什么我的输出按顺序从最小到最大。
有谁能告诉我我的代码中发生了什么?
这是我的代码:
Enter seven numbers: 12 23 44 22 23 22 55
Number 12 occurs 1 times
Number 22 occurs 2 times
Number 23 occurs 2 times
Number 44 occurs 1 times
Number 55 occurs 1 times
以下是输出的副本:
AS
正如你可以看到它在23之前列出22等等。我希望它按照输入的顺序打印。
答案 0 :(得分:1)
您可以将输入中的int分配给数组:
number[i] = input.nextInt();
然后你通过循环计算它们:
for (i = 0; i < number.length; i++) {
temp = number [i];
count [temp]++;
}
如您所见,如果数字temp
为12
,则会将索引count
的{{1}}值增加一。
基本上,12
因此,当您打印count[i] = number of occurrence of number i
数组时,您会按自然顺序看到它们。
如果您想按照订单顺序打印商品,建议您使用count
存储相关商品:
Map
您可以按顺序打印它们:
Map<Integer, Integer> count = new LinkedHashMap<>(); // LinkedHashMap remember the insert order
for (i = 0; i < number.length; i++) {
temp = number [i];
if (count.contains(temp)) {
count.put(temp, count.get(temp) + 1);
} else {
count.put(temp, 1);
}
}
答案 1 :(得分:1)
首先,2个循环将是近似无限循环(1000000次)。经济实惠。
// second loop - checks for reoccurance of numbers
for (i = 0; i < number.length; i++) {
System.out.println("app. infinity loop");
}
// final loop - gives the output of the count (also app. infinity)
for (i = 1; i < count.length; i++) {
System.out.println("app infinity loop");
}
我认为这将是最好的答案(就像@Manh Quyet一样)
public static void main(String[] args) {
System.out.println("Quenten's Copy");
Scanner input = new Scanner(System.in);
int number[] = new int[7]; // initialize first array
HashMap<Integer, Integer> map = new LinkedHashMap<>();
System.out.print("Enter seven numbers: "); // ask user for input
// first loop - takes in user input
for (int i = 0; i < 7; i++) {
number[i] = input.nextInt();
}
// second loop - checks for reoccurance of numbers
for (int i = 0; i < number.length; i++) {
int key = number[i];
if (map.containsKey(key)) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
// final loop - gives the output of the count
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
System.out.printf("Number %d occurs %d times\n", key, value);
}
}