【问题标题】:Counting occurrences of integers in an array program java计算数组程序java中整数的出现次数
【发布时间】:2015-11-04 00:35:49
【问题描述】:

我正在尝试查找用户提交到程序中的所有整数的出现次数,到目前为止,这就是我得到的。它有效,但我认为这不是一种合法的方式,有什么方法可以在不使用list[10]=9999; 的情况下尝试做到这一点?因为如果我不这样做,它会显示超出边界错误。

import java.util.*;

public class OccurrencesCount
{
   public static void main(String[] args) 
   {
   Scanner scan = new Scanner(System.in);

  int[] list = new int[11];

  //Accepting input.
  System.out.print("Enter 10 integers between 1 and 100: ");
  for(int i = 0;i<10;i++){
     list[i] = scan.nextInt();
     list[10] = 9999;
  }
  //Sort out the array.
  Arrays.sort(list);
  int count = 1;
  for(int i = 1;i<11;i++){
        if(list[i-1]==list[i]){
           count++;
        }
        else{
           if(count<=1){
              System.out.println(list[i-1] + " occurs 1 time.");
           }
           else{
              System.out.println(list[i-1] + " occurrs " + count + " times.");
              count = 1;
           }
        }
     }

}
}

【问题讨论】:

标签: java


【解决方案1】:

就个人而言,我认为这是一个非常好的解决方案。这意味着您可以像处理所有其他人一样处理最后一组。我要做的唯一更改是将行 list[10] = 9999; 放在 for 循环之外(没有理由这样做 10 次)。

但是,如果你想使用长度为 10 的数组,你可以换行

if(list[i-1]==list[i])

if(i < 10 && list[i-1]==list[i])

如果您这样做,您将不会从 list[i] 获得 ArrayIndexOutOfBoundsException,因为在 i == 10 时不会计算 &amp;&amp; 之后的表达式。

【讨论】:

  • 我尝试添加 i
【解决方案2】:
import java.util.*;
class OccurrencesCount {
   public static void main(String[] args) {
   Scanner scan = new Scanner(System.in);
   int[] list = new int[101];
   System.out.print("Enter 10 integers between 1 and 100: ");
   for(int i = 0;i<10;i++) {
     int x = scan.nextInt();
     list[x]++;
  }
  for(int i = 1; i <= 100; i++) 
     if(list[i] != 0)
       System.out.println(i + " occurs " + list[i] + " times ");

    }
}

要存储从 1 到 100 的数字计数,您需要使用 100 个整数的列表,每个整数存储自身出现的次数。更好的方法是使用地图。

【讨论】:

    【解决方案3】:

    如果你感兴趣的话,我已经使用了 ArrayList 和 Collections 包而不是常规数组作为不同的风格。

    import java.util.*;
    
    public class OccurrencesCount {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
    
            List<Integer> list = new ArrayList<>();
    
            //Accepting input.
            System.out.print("Enter 10 integers between 1 and 100: ");
            for (int i = 0; i < 10; i++) {
                list.add(scan.nextInt());
            }
    
            Collections.sort(list);
            Integer prevNumber = null;
            for (int number : list) {
                if (prevNumber == null || prevNumber != number) {
                    int count = Collections.frequency(list, number);
                    System.out.println(number + " occurs " + count + (count > 1 ? " times." : " time."));
                }
                prevNumber = number;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我明白了伙计们,只改变了条件内的一些小东西,一切都很顺利!谢谢您的帮助!现在我只需要找到一种方法来限制输入超过 100。

      import java.util.*;
       public class CountOccurrences
       {
       public static void main(String[] args) 
       {
        Scanner scan = new Scanner(System.in);
      
        int[] list = new int[10];
      
        //Accepting input.
        System.out.print("Enter 10 integers between 1 and 100: ");
        for(int i = 0;i<=9;i++){
           list[i] = scan.nextInt();
        }
        //Sort out the array.
        Arrays.sort(list);
        int count = 1;
        for(int i = 1;i<=10;i++){
              if(i<=9 && list[i-1]==list[i]){
                 count++;
              }
              else{
                 if(count<=1){
                    System.out.println(list[i-1] + " occurs 1 time.");
                 }
                 else{
                    System.out.println(list[i-1] + " occurrs " + count + " times.");
                    count = 1;
                 }
              }
           }
      
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-24
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 2015-06-18
        • 1970-01-01
        相关资源
        最近更新 更多