Hallo zusammen, ich bin gerade dabei java zu lernen und einpaar aufgeben zu lösen und möchte hier mit euch eine aufgabe teilen, die vielleicht für den einen oder anderen interessant wäre.
die Aufgabe:
Schreiben Sie einen Methoden-Body, der alle Vorkommen einer bestimmten Zier d zwischen einschlielich 0 und einer gegebenen Zahl u zahlt.
Beispiel:
int u = 13
int d = 0
=> 2
bei der Lösung darf keine Rekursion benutzte werden.
hier meine Lösung :
die Lösung ist richtig solange die Zahl <= 10 ist sobald ich 11 eigebe. wird die summe - 1 gezählt und ich weiss warum, ich schaffe es aber nicht die zweite 1 in 11 mit zu zählen bzw frage ich mich, ob es eine andere einfache lösung gäbe, abgesehen von Modulo und Rest.
mein Problem ist bei der Methode digitInNumber()
die Aufgabe:
Schreiben Sie einen Methoden-Body, der alle Vorkommen einer bestimmten Zier d zwischen einschlielich 0 und einer gegebenen Zahl u zahlt.
Beispiel:
int u = 13
int d = 0
=> 2
bei der Lösung darf keine Rekursion benutzte werden.
hier meine Lösung :
Java:
package Uebungen;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException, NumberFormatException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String zahl ="";
try {
System.out.printf("du kannst zwei Zahlen eingeben u und d%n" +
"u = eine Zahl %n" +
"d = wie oft taucht die ziffer d in der Zahl u auf%n");
System.out.printf("%ngib die Zahl d und u getrennt mit einem Leerzeichen:%n"
+ "(z.B: u = 17 d = 7 Eingabe muss so sein => 17 7%n%n");
zahl = br.readLine(); // eingabe einlesen und in zahl speichern
String[] input = zahl.split("\\s"); // eingabe in einem Sting array speichern
System.out.printf("%ndie Ziffer %s taucht %d-mal in den Zahlen 0 bis %s%n%n",
input[1],
howManyTimes(Integer.parseInt(input[0]), Integer.parseInt(input[1])),
input[0]);
}
catch (IllegalArgumentException iae) {
System.out.println("bitte die Zahl u und die Ziffer d getrennt mit einem Leerzeichen eingenben");
}
catch(ArrayIndexOutOfBoundsException a) {
System.out.println("bitte nur zahlen eigeben, Zahl und Ziffer müssen mit Leerzeichen getrennt sein");
}
}
// zählt wie oft eine ziffer in einer Zahl vorhanden ist
public static int howManyTimes(int zahl, int ziffer) {
int counter = 0;
for( int i = 0; i <= zahl; i++) {
if(digitInNumber(i, ziffer)) // wenn true
++counter; // counter + 1
}
return counter;
} // END howManyTimes()
// prüft ob ein ziffer in einer Zahl vorhanden ist.
public static boolean digitInNumber(int zahl, int ziffer) {
String number = zahl + "";
String digit = ziffer + "";
char[] array = number.toCharArray(); // zahl in ziffern zerlegen und in char array speichern
for(int i = 0; i < array.length; i++)
if(array[i] == digit.charAt(0))
return true;
return false;
}//END digitInNumber()
}
die Lösung ist richtig solange die Zahl <= 10 ist sobald ich 11 eigebe. wird die summe - 1 gezählt und ich weiss warum, ich schaffe es aber nicht die zweite 1 in 11 mit zu zählen bzw frage ich mich, ob es eine andere einfache lösung gäbe, abgesehen von Modulo und Rest.
mein Problem ist bei der Methode digitInNumber()