Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Fehler im Programm (http://www.informatikerboard.de/board/thread.php?threadid=2263)
Geschrieben von Björn am 09.05.2015 um 23:47:
Fehler im Programm
Meine Frage:
Hey Leute,
brauche bitte mal kurz Eure Hilfe :-) Gezählt werden soll von einer Integer-Zahl die Anzahl der enthaltenen 5en.
Mein Code:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
|
public class Zählen
{
public static void main (String[]args)
{
System.out.println(zähle5en (252525));
}
public static int zähle5en (int zahl)
{
Integer meinInteger = new Integer(zahl);
String s = meinInteger.toString();
int counter = 0;
for (int i=0;i<s.length()-1;i++)
{
if (s.charAt(i)==5)
{
++counter;
}
}
return counter;
}
}
|
|
Meine Ideen:
Meine Idee:
Ich habe die Integer-Zahl erst einmal in einen String umgewandelt und lasse dann den String mit char charAt() vergleichen. Bei einer gefunden 5 soll sich der Zähler (counter) um eins erhöhen.
Leider bekomme ich immer eine falsche Lösung heraus. Wäre super, wenn ihr mal einen Blick darauf werfen könntet :-)
Vielen dank
Geschrieben von as_string am 10.05.2015 um 00:02:
Hallo!
Ich vermute, Dein Vergleich in Zeile 17 ist falsch: die charAt()-Funktion liefert ein Zeichen. Und Du suchst nach einem char '5' und nicht nach einem ASCII-Wert von 5.
Gruß
Marco
Geschrieben von Karlito am 10.05.2015 um 02:39:
Genau das ist der Fehler. Übrigens sollte man Sonderzeichen vermeiden. Weiterhin kann man das Problem auch ohne die Umwandlung in String lösen:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
|
public class Zaehlen
{
public static void main (String[]args)
{
System.out.println(zaehle5en (252525));
}
public static int zaehle5en (int zahl)
{
int counter = 0;
while (zahl > 0){
if (zahl % 10 == 5){
counter++;
}
zahl /= 10;
}
return counter;
}
}
|
|
Gruß,
Karlito
Geschrieben von eulerscheZahl am 10.05.2015 um 06:51:
Im ursprünglichen Programm gibt es noch einen weiteren Fehler:
for (int i=0;i<s.length()-1;i++)
hier wird die letzte Ziffer nicht mehr betrachtet.
Geschrieben von Björn am 10.05.2015 um 11:15:
Vielen Dank für Eure Antworten.
Die Lösung mit der Modulo - Rechnung finde ich sehr interessant
Geschrieben von bjÖrn am 10.05.2015 um 11:23:
Das ganze soll auch noch rekursiv geschrieben werden, allerdings bekomme ich da auch noch einen Fehler:
| code: |
1:
|
public class ZählenRecursiv { public static void main (String[]args) { System.out.println(zaehle5en (255)); } public static int zaehle5en (int zahl) { int counter = 0; if (zahl<0) {} else { if (zahl%10==5)++counter; zahl /=10; System.out.print(counter); return zaehle5en (zahl-1); } return counter; } } |
|
Wäre super, wenn ihr noch einen Blick darauf werfen könntet :-)
Geschrieben von bjÖrn am 10.05.2015 um 11:25:
Das ganze soll auch noch rekursiv geschrieben werden, allerdings bekomme ich da auch noch einen Fehler:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
public class ZählenRecursiv
{ public static void main (String[]args)
{ System.out.println(zaehle5en (255)); }
public static int zaehle5en (int zahl)
{ int counter = 0;
if (zahl<0) {}
else {
if (zahl%10==5)++counter;
zahl /=10;
//System.out.print(counter);
return zaehle5en (zahl-1); }
return counter; } } |
|
Wäre super, wenn ihr noch einen Blick darauf werfen könntet :-)
Geschrieben von eulerscheZahl am 10.05.2015 um 11:35:
Wirklich leserlich finde ich das immer noch nicht.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
public static void main(String[] args) {
System.out.println(zaehle5en(255));
}
public static int zaehle5en(int zahl) {
int counter = 0;
if (zahl < 0) {
} else {
if (zahl % 10 == 5)
++counter;
zahl /= 10;
// System.out.print(counter);
return zaehle5en(zahl - 1);
}
return counter;
} |
|
Bei Zeile 7 hast du eine leere Anweisung. Du zählst die 5en in der Zahl 0 - und das auch noch falsch, warum rechnest du noch zahl-1?
Hier mal meine Version:
| code: |
1:
2:
3:
4:
5:
|
public static int zaehle5en(int zahl) {
if (zahl == 0)
return 0;
return (zahl % 5 == 0 ? 1 : 0) + zaehle5en(zahl / 10);
} |
|
Forensoftware: Burning Board, entwickelt von WoltLab GmbH