2015-11-04 64 views
2

我想查找用戶提交到程序中的所有整數的出現次數,到目前爲止這裏是我得到的結果。它的工作原理,但我不認爲這是一個合法的方式來做到這一點,有沒有什麼辦法可以嘗試做到這一點,而不使用list[10]=9999;?因爲如果我不這樣做,它會顯示出邊界錯誤。在一個數組程序中計數整數的發生java

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

} 
} 
+1

是否有一個原因,你的int數組的大小是11,但你只在循環中循環10次? –

+1

設置列表[10] = 9999有什麼用? –

+1

可能的重複http://stackoverflow.com/questions/33459302/counting-occurrences-of-integers-in-an-array,和http://stackoverflow.com/questions/8098601/java-count-occurrence-of- each-item-in-an-an-array – tam5

回答

0

我個人認爲這是一個非常好的解決方案。這意味着你可以像所有其他人一樣處理最後一組。我所做的唯一改變就是將list[10] = 9999;這一行放在for循環之外(沒有理由再做10次)。

但是,如果你想使用長度10的陣列,可以行

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

改變

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

如果你這樣做,你不會得到從ArrayIndexOutOfBoundsExceptionlist[i],因爲&&之後的表達式在i == 10時未被評估。

+0

我嘗試添加i < 10並刪除列表[10],但最終以0開始計數爲1,所以我嘗試了9;現在9不起作用,但它非常接近正確,只是它不檢查排序數組中最後一個整數的值? (是的,他們只需要10個數組) –

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。

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

} 
} 
相關問題