计算数组程序java中整数的出现次数

时间:2015-11-04 00:35:50

标签: java

我试图找到用户提交到程序中的所有整数的出现,到目前为止这是我得到的。它有效,但我不认为这是一种合法的方式,我有没有办法在不使用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;
           }
        }
     }

}
}

4 个答案:

答案 0 :(得分:0)

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个整数的列表,每个整数存储自身的出现次数。更好的方法是使用Map。

答案 1 :(得分:0)

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

但是,如果要使用长度为10的数组,可以更改行

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

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

如果您执行此操作,则不会从ArrayIndexOutOfBoundsException获得list[i],因为在&&时未评估i == 10之后的表达式。

答案 2 :(得分:0)

如果感兴趣的话,我已经使用了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;
        }
    }
}

答案 3 :(得分:0)

我弄明白了,只是改变了条件内的几件小东西,一切顺利!谢谢您的帮助!现在我只需要找到一种限制输入超过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;
           }
        }
     }

 }
}