2017-04-04 15 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になります。何が間違っていましたか?私はステートメントを切り替えることに新しいので、解決が明白な場合はごめんなさい

+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'の文字と対応するint値が48あります。

だから、あなたのコードで行うことができる最も簡単には

入力文字列が数値で構成されて

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

仮定です。

+2

OPはまた 'スイッチ'権利を取り除くことができますか?すべての 'switch/case'ブロックの代わりにこの行だけで' numberAmount [(int)input.charAt(i) - 48] + = 1; ' – Yazan

+0

ありがとう!私は0,1,2などを48,49,50などに変換しました。今は完璧に動作します。 @ Yazan。 – mattprater

+1

うん。あなたが正しいです。私はOPによって書かれたコードに最小限の変更を加えることを考えていました。 – niyasc

0

スイッチのケースには、文字列があります。入力して番号にキャストし、プログラムを実行してください。それはうまくいくでしょう

1

もう一つの答えでは、文字の暗黙の整数値は表示された数字の値ではありません。

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

他の回答がintcharを変更するにはヒットを与えているが、実際にあなたが使用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]); 
    } 
}