2015-12-14 15 views
5

配列を使用してプログラムを記述する必要があります。配列を使用するには、数値を受け取り、その数値内の各桁のインシデント数を返します。私はここでは、私は事を過度に複製するかもしれないと思う。配列を使用して数値の各桁の出現をカウントする

import java.util.*; 
class Exercice7 { 

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

    System.out.println("Veuillez saisir un nombre naturel:"); // Get number 

    int n = sc.nextInt();          // Store number as n 

    String str = Integer.toString(n);       // Store n as string 

    int length = str.length();         // Store string length as length 

    int arr[] = new int[length];        // Declare array with as many elements as n has digits 

    int digit[] = {0,1,2,3,4,5,6,7,8,9};      // Declare array with the digits to look for 

    int count = 0;            // Number of occurences of each digit 

    for (int i=(length-1); i>=0; i--) {       // Fill array with digits from number input 
     while (n>0) { 
      arr[i]= n%10; 
      n = n/10; 
     } 
    } 

    for (int j=0; j<10; j++) { 
     count = 0; 
     for (int i=0; i<length; i++) { 
      if (arr[i]==digit[j]) { 
       count++; 
      } 
     } 
     if (count>0) { 
     System.out.println(digit[j] + " occurs " + count + " times."); 
     } 
    } 
    } 
} 

このコードは0と1の数だけを返しますが、とにかく間違っています。誰かが私を正しい方向に押し込んでくれますか?

答えて

4

を10個の要素([0..9])で配列を宣言してください。そこにあなたの番号の各桁が出現します。 counts[3]を単に使用すると、数字3の発生数が得られます。

次に、文字列番号を反復して、次のcharを整数として読み込み、カウンタを増やします。このようにすれば、ループは1つしかありません。たとえば、番号に3がある場合は、counts[3]++を使用します。

+0

これはあなたが意味するものかどうかは分かりませんが、うまくいくようです! – ktouchie

+0

よくできてうれしく思います。これが私がコードを提供しなかった理由です。それは、(ハード?)質問のためのあなた自身の答えを作るとき、はるかに楽しく、もっと楽しいです。良い仕事、男、私の方法が少し異なる場合でも:) – deem

+0

ありがとう、みなさ!全くもって同じ意見です。 :) – ktouchie

0

カウンターは1つだけです。 10桁のカウンターが10個必要です。

あなたはカウンタの digitのアレイを使用することができます

int digit[] = new int[10]; // all initialized to 0, digit[i] will count the 
          // occurrences of the digit i 

for (int i=0; i<length; i++) { 
    digit[arr[i]]++; 
} 

for (int j=0; j<10; j++) { 
    System.out.println(j + " occurs " + digit[j] + " times."); 
} 
0

あなたは文字列に変換しようとすることができ、それをプリントアウトし、その後

int counts[] = {0,0,0,0,0,0,0,0,0,0}; 
int myNumber=123222;//example 
String string=""+myNumber; //converting integer to String 

for(int i=0;i<string.length();i++){ 
try{ 
    int n=Integer.parseInt(string.charAt(i)+"") 
    counts[n]=counts[n]+1; 
}catch(Exception e){} 

} 

各文字を読む:

for (int i=0; i<counts.length; i++) { 
    System.out.println(i + " occurs " + counts[i] + " times."); 
} 
+0

counts配列は、数字がインデックスで表されるのではなく、各数字のカウントを表すため、初期化時にすべての要素を0にする必要があります。 – Ciara

+0

@Ciara ur right、私はそれを修正しました、thx – nafas

0

ありがとうございます、deem、あなたの答えです。私は完全にあなたが何を意味するのか理解していなかったが、それは私が正しい軌道に乗る助け:

import java.util.*; 
class Exercice7 { 

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

    System.out.println("Veuillez saisir un nombre naturel:"); //* Get number */ 
    int num = sc.nextInt(); //* Store number as n */ 
    String str = Integer.toString(num); //* Store n as string *// 

    char digit[] = {'0','1','2','3','4','5','6','7','8','9'}; 
    int count = 0; 

    for (int i=0; i<10; i++) { 
     for (int j=0; j<(str.length()); j++) { 
      if (str.charAt(j) == digit[i]) { 
       count++; 
      } 
     } 
     if (count>0) { 
      System.out.println(digit[i] + " apparait " + count + " fois."); 
      count = 0; 
     }    
    } 
} 
} 

それは最も簡単な方法ではないかもしれないが、それは動作します!コードを改善したい場合は、自由にコメントを追加してください。

関連する問題