2017-04-04 55 views
0
import java.util.Scanner; 

public class Occurrence { 

    public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 
     String input = scan.next(); 
     int[] numberAmount = new int[10]; 
     for (int i = 0; i < input.length(); i++) { 
      switch (input.charAt(i)) { 
       case 0: 
        numberAmount[0] += 1; 
        break; 
       case 1: 
        numberAmount[1] += 1; 
        break; 
       case 2: 
        numberAmount[2] += 1; 
        break; 
       case 3: 
        numberAmount[3] += 1; 
        break; 
       case 4: 
        numberAmount[4] += 1; 
        break; 
       case 5: 
        numberAmount[5] += 1; 
        break; 
       case 6: 
        numberAmount[6] += 1; 
        break; 
       case 7: 
        numberAmount[7] += 1; 
        break; 
       case 8: 
        numberAmount[8] += 1; 
        break; 
       case 9: 
        numberAmount[9] += 1; 
        break; 
      } 
      } 
     for (int i = 0; i <= 9; i++) { 
      System.out.printf("%d: %d\n", i, numberAmount[i]); 
     } 


    } 

} 

我們得到了一個任務,我們必須查看一個數字在更大數量中出現的頻率。未能在此代碼中獲得所需的輸出

實施例1:
輸出:
0:5
1:7
2:2
3:1
4:0
5:0
6:0
7:0
8:0
9:0

當我運行我的代碼並輸入一個數字時,所有數字的值都是0.我做錯了什麼?我是新來的switch語句很抱歉,如果該解決方案是顯而易見的

+0

什麼是你的代碼的目的是什麼?你是否想要統計每個數字中出現多少個相等的數字? – freedev

回答

1

另一種方式實現的是如下:

switch (input.charAt(i)) { 
      case '0': 
       numberAmount[0] += 1; 
       break; 
      case '1': 
       numberAmount[1] += 1; 
       break; 
      case '2': 
       numberAmount[2] += 1; 
       break; 
      case '3': 
       numberAmount[3] += 1; 
       break; 

將所有案例值都作爲char,並用單引號括起來。

+0

謝謝!如果有人查看我的代碼,這也可以工作,看起來更具可讀性。 – mattprater

3

的問題發生,因爲,'1'不等於1

1是整數
'1'是一個字符和相應的int值是48

所以,可以在你的代碼來完成最簡單的就是

switch ((int)input.charAt(i) - 48) { 

假設

輸入字符串由數值。

+2

OP也可以擺脫'switch'吧?只是這行代替所有的'switch/case'塊'numberAmount [(int)input.charAt(i) - 48] + = 1;' – Yazan

+0

謝謝!我將0,1,2等轉換爲48,49,50等,現在它完美了。 – mattprater

+1

@Yazan。是啊。你是對的。我正在考慮對OP編寫的代碼進行微小的更改。 – niyasc

0

在開關櫃中,你所得到的是一個字符串。請鍵入將其轉換爲數字,然後運行您的程序。它會工作

1

正如@niyasc在另一個答案中所說的,字符的隱式整數值不是顯示的數字的值。

您可以使用Character.getNumericValue來獲取所需的值。

switch (Character.getNumericValue(input.charAt(i))) 

爲了確保所有字符是數字,您可能只想要你的switch語句之前使用Character.isDigit

if(Character.isDigit(input.charAt(i))){ 

    // do stuff 
    // switch.... 


} 
else{ 

    // warn user/ask for new input 
} 
0

其他的答案已經給改charint命中,但實際上你並不需要使用switch-case,試試下面的代碼:

public static void main(String[] args) { 

    Scanner scan = new Scanner(System.in); 
    String input = scan.next(); 
    int[] numberAmount = new int[10]; 
    for (int i = 0; i < input.length(); i++) { 
     numberAmount[(int)input.charAt(i) - 48] ++; // This is enough 
    } 
    for (int i = 0; i <= 9; i++) { 
     System.out.printf("%d: %d\n", i, numberAmount[i]); 
    } 
}