2015-12-14 8 views
5

Ich muss ein Programm schreiben mit Arrays, die eine Zahl nimmt und gibt die Anzahl der Vorfälle von jeder Ziffer innerhalb dieser Zahl. Ich denke, ich könnte die Dinge hier zu kompliziert machen.Anzahl der Vorkommen jeder Ziffer in Anzahl mit Arrays

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."); 
     } 
    } 
    } 
} 

Dieser Code gibt nur die Anzahl der 0s und 1s zurück und es ist sowieso falsch. Könnte mich jemand in die richtige Richtung drängen?

Antwort

4

Deklariere ein Array mit zehn Elementen ([0..9]) - dort wirst du jede Ziffer in deiner Zahl vorfinden. Mit counts[3] erhalten Sie die Anzahl der Vorkommen der Ziffer 3.

Dann iterieren Sie einfach über String-Nummer und lesen Sie das nächste Zeichen als Integer und Zähler erhöhen. Auf diese Weise haben Sie nur eine Schleife. Wenn Sie beispielsweise 3 in Ihrer Nummer verwenden, verwenden Sie counts[3]++.

+0

Nicht sicher, ob das gemeint ist, aber es scheint zu funktionieren! – ktouchie

+0

Nun, ich bin froh, dass Sie es geschafft haben - deshalb habe ich keinen Code zur Verfügung gestellt. Es ist viel besser und macht mehr Spaß, wenn Sie Ihre eigene Antwort auf (harte?) Frage machen. Guter Job, Mann, auch wenn mein Weg etwas anders ist :) – deem

+0

Danke, schätze! Ich bin vollkommen einverstanden. :) – ktouchie

0

Sie haben nur einen Zähler. Sie benötigen 10 Zähler für die 10 Ziffern.

Sie können das digit Array für Zähler:

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

können Sie versuchen, zu String konvertieren und lesen Sie jede char

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){} 

} 

dann auszudrucken:

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

Das counts-Array sollte alle Elemente bei 0 initialisieren, da die Werte die Anzahl der einzelnen Ziffern und nicht die Ziffer selbst (die durch den Index repräsentiert wird) darstellen. – Ciara

+0

@Ciara Ihr Recht, ich habe es behoben, thx – nafas

0

Danke, deem, für Ihre Antwort. Ich habe nicht ganz verstehen, was Sie wollen, aber es hat mir geholfen, auf dem richtigen Weg:

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

Es kann nicht der einfachste Weg sein, aber es funktioniert! Fühlen Sie sich frei, weitere Kommentare hinzuzufügen, wenn Sie den Code verbessern möchten.

Verwandte Themen