java - 如何让我的数组打印输入的重复一次? (JAVA)

标签 java arrays logic system.printing

我必须设计一个程序,接受 0-50 之间的任意输入打印所有输入一次,然后<打印出每个输入的出现次数。

我让它在某种程度上起作用,但是,当输入是: 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

这是一门初学者类(class),我在网上看到的大多数解决方案似乎都是使用某种我尚未学过的映射技术来实现的。

 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]);
      }
    }
  }
}

我尝试了多种格式化循环的方法,但我似乎不知道如何让它打印一次多次输入的数字。

最佳答案

欢迎来到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 个输出 - 每次值更改时和列表末尾。理想情况下,您可以将值和计数存储在一个对象中以避免代码重复,但我认为现阶段这太先进了。

希望您可以相对轻松地将其转换为代码。

关于java - 如何让我的数组打印输入的重复一次? (JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53807718/

相关文章:

java - Integer.parseInt 数字格式异常?

java - 从用户那里读取多个单词

c++ - 对数组C++中的最大和最小值进行排序

javascript - 如何优化长时间运行的脚本

c++ - 排序链表实现,得到相同的链表

java - 如果未检测到 '@' 符号,则将错误消息打印到屏幕

java - 操作未收到表单的值

javascript - 无法遍历通过数据传递的数组,但是当我创建完全相同数组的变量时它就可以工作

integer - VHDL:找出/报告整数的位宽/长度(相对于 std_logic_vector)?

php - 使用两个不同的表咨询更多的值组合