如何让我的阵列重复打印一次输入? (JAVA)
How do I make my array print repetitions of an input once? (JAVA)
我必须设计一个程序,接受 0-50 的任意输入,打印 所有 输入 ONCE,然后 输出 每个输入的 出现。
我让它在某种程度上起作用了,但是,当输入是:
1 , 2 , 3 , 3 , 3 , 6 , 9 , 0 , 0
打印出:
输入:出现
Number Times
1 1
2 1
3 1
3 2
3 3
6 1
9 1
0 1
0 1
而不是:
输入:出现
Number Times
0 2
1 1
2 1
3 3
6 1
9 1
这是一门初学者课程,我在网上看到的大多数解决方案似乎都使用了某种我还没有学过的映射技术进行了改进。
public static void main(String [] args)
{
int[] array = new int[51];
Scanner scan = new Scanner(System.in);
System.out.println("Number \t Times");
while (scan.hasNext()){
int x = scan.nextInt();
if (x>=0 && x<=50){
array[x]++;
System.out.println(x + "\t " + array[x]);
}
}
}
}
我尝试了多种格式化循环的方法,但我似乎无法找到如何让它打印一次输入多次的数字。
欢迎来到 Whosebug 社区!我知道您提到您还没有了解 'advanced mapping techniques',但为什么不现在就了解一下呢?无论如何,您以后很有可能会再次需要它们。
我们可以通过使用一个叫做 'hashmap' 的东西轻松解决这个问题。哈希图很有用,因为它允许您在每个索引处存储两个值,一个键和一个值。这很有用,因为键与值相关(这意味着你有键就可以找到值),并且不能有重复的键。
下面是一个使用散列映射来解决您的问题的示例。
// Here we create our hashmap. Be adding <Integer, Integer>, we are telling the hashmap
// that the the key and value will be of type Integer (note that we can't just pass in int)
HashMap<Integer, Integer> numbers = new HashMap<Integer, Integer>();
Scanner scan = new Scanner(System.in);
System.out.println("Number \t Times");
while (scan.hasNext()){
int x = scan.nextInt();
if (x>=0 && x<=50){
// Check if the number has already been added
// to the hash map
if (numbers.containsKey(x)) {
// If so, we will get the existing value
// and increase it by 1
numbers.put(x, numbers.get(x) + 1);
}
else {
// Otherwise we will add the value
// to the hash map
numbers.put(x, 1);
}
System.out.println(x + "\t " + numbers.get(x));
}
}
欢迎来到 SO。解决此问题的最简单方法,无需使用地图,甚至无需将值存储在任何地方,就是首先对数组进行排序(您给出的示例已经排序),然后计算相邻重复项的数量。
在伪代码中,算法应该类似于
count = 1
value = array[0];
for each item from 1 to length
if item == value
increment count
else
print value: count
count = 1
value = item
print value: count
请注意,需要有 2 个输出 - 每次值更改时和列表末尾。理想情况下,您会将值和计数存储在一个对象中以避免代码重复,但我认为在这个阶段这太高级了。
希望您可以相对轻松地将其转换为代码。
如果您还在寻找,这里有另一个答案。我将保留散列图答案,因为其他人可能会觉得这很有用,但我决定也让您当前的代码正常工作。
int[] numbers = new int[51];
// Small loop to get the number input
Scanner scanner = new Scanner(System.in);
for (int i=0; i<10; i++) {
System.out.print("> ");
int x = scanner.nextInt();
if (x >= 0 && x <= 50) {
numbers[x] += 1;
}
}
// Now display the results after getting input
System.out.println("Number \t Times");
for (int i=0; i<numbers.length; i++) {
if (numbers[i] != 0) {
System.out.println(i + "\t\t" + numbers[i]);
}
}
我必须设计一个程序,接受 0-50 的任意输入,打印 所有 输入 ONCE,然后 输出 每个输入的 出现。
我让它在某种程度上起作用了,但是,当输入是: 1 , 2 , 3 , 3 , 3 , 6 , 9 , 0 , 0
打印出:
输入:出现
Number Times
1 1
2 1
3 1
3 2
3 3
6 1
9 1
0 1
0 1
而不是:
输入:出现
Number Times
0 2
1 1
2 1
3 3
6 1
9 1
这是一门初学者课程,我在网上看到的大多数解决方案似乎都使用了某种我还没有学过的映射技术进行了改进。
public static void main(String [] args)
{
int[] array = new int[51];
Scanner scan = new Scanner(System.in);
System.out.println("Number \t Times");
while (scan.hasNext()){
int x = scan.nextInt();
if (x>=0 && x<=50){
array[x]++;
System.out.println(x + "\t " + array[x]);
}
}
}
}
我尝试了多种格式化循环的方法,但我似乎无法找到如何让它打印一次输入多次的数字。
欢迎来到 Whosebug 社区!我知道您提到您还没有了解 'advanced mapping techniques',但为什么不现在就了解一下呢?无论如何,您以后很有可能会再次需要它们。
我们可以通过使用一个叫做 'hashmap' 的东西轻松解决这个问题。哈希图很有用,因为它允许您在每个索引处存储两个值,一个键和一个值。这很有用,因为键与值相关(这意味着你有键就可以找到值),并且不能有重复的键。
下面是一个使用散列映射来解决您的问题的示例。
// Here we create our hashmap. Be adding <Integer, Integer>, we are telling the hashmap
// that the the key and value will be of type Integer (note that we can't just pass in int)
HashMap<Integer, Integer> numbers = new HashMap<Integer, Integer>();
Scanner scan = new Scanner(System.in);
System.out.println("Number \t Times");
while (scan.hasNext()){
int x = scan.nextInt();
if (x>=0 && x<=50){
// Check if the number has already been added
// to the hash map
if (numbers.containsKey(x)) {
// If so, we will get the existing value
// and increase it by 1
numbers.put(x, numbers.get(x) + 1);
}
else {
// Otherwise we will add the value
// to the hash map
numbers.put(x, 1);
}
System.out.println(x + "\t " + numbers.get(x));
}
}
欢迎来到 SO。解决此问题的最简单方法,无需使用地图,甚至无需将值存储在任何地方,就是首先对数组进行排序(您给出的示例已经排序),然后计算相邻重复项的数量。
在伪代码中,算法应该类似于
count = 1
value = array[0];
for each item from 1 to length
if item == value
increment count
else
print value: count
count = 1
value = item
print value: count
请注意,需要有 2 个输出 - 每次值更改时和列表末尾。理想情况下,您会将值和计数存储在一个对象中以避免代码重复,但我认为在这个阶段这太高级了。
希望您可以相对轻松地将其转换为代码。
如果您还在寻找,这里有另一个答案。我将保留散列图答案,因为其他人可能会觉得这很有用,但我决定也让您当前的代码正常工作。
int[] numbers = new int[51];
// Small loop to get the number input
Scanner scanner = new Scanner(System.in);
for (int i=0; i<10; i++) {
System.out.print("> ");
int x = scanner.nextInt();
if (x >= 0 && x <= 50) {
numbers[x] += 1;
}
}
// Now display the results after getting input
System.out.println("Number \t Times");
for (int i=0; i<numbers.length; i++) {
if (numbers[i] != 0) {
System.out.println(i + "\t\t" + numbers[i]);
}
}