2015-12-14 8 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 और 1s की संख्या देता है और यह वैसे भी गलत है। क्या कोई मुझे सही दिशा में धक्का दे सकता है?

उत्तर

4

दस तत्वों ([0..9]) के साथ सरणी घोषित करें - वहां आपके पास प्रत्येक अंक के प्रत्येक अंक के अवसर होंगे। बस counts[3] का उपयोग करके आपको अंकों की संभावनाएं मिलेंगी।

फिर आप स्ट्रिंग नंबर पर फिर से सक्रिय हो जाते हैं और अगले चार को पूर्णांक के रूप में पढ़ते हैं और काउंटर बढ़ाते हैं। इस तरह आपके पास केवल एक लूप है। उदाहरण के लिए, आपके नंबर पर, आप counts[3]++ का उपयोग करते हैं।

+0

सुनिश्चित नहीं है कि यह आपके लिए क्या है, लेकिन ऐसा लगता है कि यह काम करता है! – ktouchie

+0

अच्छी तरह से मुझे खुशी है कि आपने इसे काम किया है - यही कारण है कि मैंने कोई कोड नहीं दिया। यह बहुत बेहतर और अधिक मजेदार है, जब आप अपना जवाब (हार्ड?) प्रश्न के लिए करते हैं। अच्छा काम, आदमी, भले ही मेरा रास्ता थोड़ा अलग है :) – deem

+0

धन्यवाद, डीम! मैं पूरी तरह सहमत हूँ। :) – ktouchie

0

आपके पास केवल एक काउंटर है। आपको 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

गणना सरणी में सभी तत्व 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; 
     }    
    } 
} 
} 

यह सबसे आसान तरीका है नहीं हो सकता है, लेकिन यह काम करता है! यदि आप कोड में सुधार करना चाहते हैं तो अधिक टिप्पणियां जोड़ने के लिए स्वतंत्र महसूस करें।