2016-10-18 7 views
0

Ich versuche ein Programm zu machen, das einen Benutzer nach zwei Nummern fragt. Ich möchte feststellen, wie oft ein bestimmter Wert in der Zahlenfolge erscheint. Wenn beispielsweise der Benutzer 10 und 20 eingegeben hat, würde die Zahl "1" 9 mal erscheinen. Was ich frage mich ist, welche Bedingung müsste ich einstellen, um zu sehen, wie oft die Zahl "1" erscheinen würde. DieseWas wäre der Zustand?

ist, was ich so weit gekommen ...

System.out.println("Enter a number: "); 
    int no1 = scan.nextInt(); 
    System.out.println("Enter a number: "); 
    int no2 = scan.nextInt(); 

    int i; 
    int j = 0; 

    for(i = no1; i <= no2; i++){ 
     if(){      // Some condition here 
      j++; 
     } 
    } 
    System.out.println(j); 
} 

Alle anderen Tipps und Tricks, wie mein Code effizienter machen auch sehr geschätzt werden würde.

+0

'Zum Beispiel, wenn der Benutzer 10 und 20 eingegeben hat, erscheint die Zahl" 1 "9 Mal. - Es ist unklar, was Sie damit meinen. Die Zahl 1 erscheint überhaupt nicht zwischen 10 und 20, und die Zahl 1 erscheint 10 oder 11 Mal als Teil einer Zahl, abhängig davon, ob Ihre Grenzen inklusiv oder exklusiv sind. – azurefrog

+0

"Wenn der Benutzer z. B. 10 und 20 eingegeben hat, erscheint die Zahl" 1 "9 Mal." - Warum das? Es erscheint nur einmal. – Turing85

+0

einschließlich 10 es erscheint 11 mal ist es nicht ... 10-1, 11-2 und so weiter .. lass mich dir einen Tipp geben .. du musst modulo operator verwenden und vergleichen Sie jede Zahl in einer Zahl .. was ist, wenn Benutzer gibt die Nummer zwischen 110 bis 120 –

Antwort

1
for (int i = no1; i <= no2; i++) { 
    if(String.valueOf(i).contains("1")) 
     int occurances = StringUtils.countOccurrencesOf(String.valueOf(i), "1"); 
     j+=occurances 
} 
+1

nicht ganz korrekt .. was ist, wenn die Nummer im Bereich zwischen 110-120 .. nicht richtig funktioniert? –

+0

Danke für die Erwähnung. Ich habe es repariert. –

+0

Macht jetzt Sinn ... :) gegeben ein up –

0

Angenommen, Sie möchten das Vorkommen einer Ziffer in einer Liste von Zahlen zählen, z. Verwendung modulo:

int[] occurrences = new int[10]; 
for (int i = n1; i <= n2; i++) { 
    int currentNumber = Math.abs(i); 
    while (currentNumber > 0) { 
     occurrences[currentNumber % 10]++; 
     currentNumber /= 10; 
    } 
} 

oder parsen die Stringdarstellung der Anzahl

int[] occurrences = new int[10]; 
for (int i = n1; i <= n2; i++) { 
    String cur = String.valueOf(Math.abs(i)); 
    for (int j = 0; j < cur.length(); j++) { 
      char currentChar = cur.charAt(j); 
      if (currentChar != '-') 
       occurrences[Character.getNumericValue(currentChar)]++; 
    } 
} 

Vorkommen werden die Zählungen für die Ziffern 0 bis 9 enthalten;

Edit: Hinzugefügt Behandlung für negative ganze Zahlen.

+0

Sie verwendeten ein Array, so dass die Bedingung in der While-Schleife gültig ist. Was wäre, wenn der Benutzer eine negative Zahl für die untere Grenze eingeben würde, wie würde sich die While-Schleife ändern? – Construct0r

+0

Auch Vorkommen [currentNumber% 10] ++; aktuelleNummer/= 10; – Construct0r

+0

^Was passiert mit diesen beiden Codezeilen? – Construct0r

Verwandte Themen