gpt4 book ai didi

java - 当我编写以下代码时,为什么我的输出是 "4 10 7"而不是 "4 3 10 7"

转载 作者:行者123 更新时间:2023-12-02 03:22:54 24 4
gpt4 key购买 nike

我正在尝试计算数字中存在的设置位的数量,并根据设置位的计数按升序排列数字。

我的输入是:

1
4
3 4 7 10

预期输出是:

4 3 10 7

我的输出是:

4 10 7

为什么显示时跳过3?

package practice;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Collection;
import java.util.HashMap;
import java.util.TreeMap;
public class MonkAndTasks {
public static void main(String args[]) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
int k = 0;

while (k < t) {
long n = Long.parseLong(br.readLine());
String str = br.readLine();
String ar[] = str.split(" ");
int i = 0;
HashMap<Integer,Long> hm = new HashMap<Integer,Long>();
while (i < n) {
Long a = Long.parseLong(ar[i++]);
hm.put(count(a), a);
}
TreeMap<Integer,Long> tm = new TreeMap<Integer,Long>(hm);
Collection < Long > c = tm.values();
for (Long e: c) {
System.out.print(e + " ");
}
System.out.println();
}
}

static int count(Long n) {
int c = 0;
while (n > 0) {
n = n & (n - 1);
c++;
}
return c;
}
}

当我打印值a来检查a是否读取值3时,结果发现它正在读取值3,但将值传递给hashmap和treemap后,但没有显示所需的输出。

最佳答案

您将 4 个数字 (4 3 10 7) 作为值放入 TreeMap 中,其中键似乎是 1 的数字> 位(我认为这就是static int count(Long n) 所做的)。 310 都有 2 个 1 位(分别为 11 和 1010),因此 10 替换 3 Map 中(因为 Map 不允许重复的键),并且 3 永远不会输出。

基本上,以下循环

while(i<n)
{
Long a=Long.parseLong(ar[i++]);
hm.put(count(a),a);
}

将以下条目插入到 TreeMap 中:

hm.put(1,4);
hm.put(2,3);
hm.put(2,10); // this entry has the same key as the previous entry and therefore
// replaces it
hm.put(3,7);

关于java - 当我编写以下代码时,为什么我的输出是 "4 10 7"而不是 "4 3 10 7",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39387204/

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