Fehler im Programm

Neue Frage »

Auf diesen Beitrag antworten »
Björn 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
 
Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
eulerscheZahl

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.
 
Auf diesen Beitrag antworten »
Björn

Vielen Dank für Eure Antworten.

Die Lösung mit der Modulo - Rechnung finde ich sehr interessant Daumen hoch
Auf diesen Beitrag antworten »
bjÖrn

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 :-)
Auf diesen Beitrag antworten »
bjÖrn

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 :-)
Auf diesen Beitrag antworten »
eulerscheZahl

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);
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »