2015-12-14 17 views
5

Ho bisogno di scrivere un programma usando gli array, che prende un numero e restituisce il numero di incidenti di ogni cifra all'interno di quel numero. Penso che potrei complicare le cose qui.Conteggiare occorrenze di ogni cifra in numeri usando le matrici

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

Questo codice restituisce solo il numero di 0 e 1 ed è comunque sbagliato. Qualcuno potrebbe spingermi nella giusta direzione?

risposta

4

Dichiara matrice con dieci elementi ([0..9]) - ci saranno occorrenze di ogni cifra nel tuo numero. Semplicemente usando counts[3] otterrai il numero di occorrenze della cifra 3.

Quindi basta ripetere il numero di stringa e leggere il prossimo carattere come numero intero e aumentare il contatore. In questo modo hai un solo ciclo. Ad esempio, avendo 3 nel tuo numero, usi counts[3]++.

+0

Non so se questo è quello che intendevi, ma sembra funzionare! – ktouchie

+0

Beh, sono contento che tu abbia funzionato - questo è il motivo per cui non ho fornito alcun codice. È molto meglio e più divertente quando fai la tua risposta alla domanda (dura?). Bel lavoro, amico, anche se il mio modo è un po 'diverso :) – deem

+0

Grazie, credo! Sono totalmente d'accordo. :) – ktouchie

0

Hai solo un contatore. Hai bisogno di 10 contatori per le 10 cifre.

È possibile utilizzare la matrice digit per i contatori:

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

si può provare la conversione in stringa e leggere ogni 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){} 

} 

poi stamparlo:

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

L'array dei conteggi dovrebbe avere tutti gli elementi a 0 quando inizializzato poiché i valori rappresentano il conteggio di ogni cifra anziché la cifra stessa (che è rappresentata dall'indice). – Ciara

+0

@Ciara ur destra, l'ho risolto, grazie – nafas

0

Grazie, deem, per la risposta. Non ho completamente capito quello che volevi dire, ma mi ha aiutato a ottenere sulla strada giusta:

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

Esso non può essere il modo più semplice, ma funziona! Sentiti libero di aggiungere altri commenti se vuoi migliorare il codice.

Problemi correlati