Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Fehler im Programm » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Fehler im Programm
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Björn
unregistriert
Fehler im Programm Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
09.05.2015 23:47
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.05.2015 00:02 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.05.2015 02:39 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
10.05.2015 06:51 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Björn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank für Eure Antworten.

Die Lösung mit der Modulo - Rechnung finde ich sehr interessant Daumen hoch
10.05.2015 11:15
bjÖrn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 :-)
10.05.2015 11:23
bjÖrn
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 :-)
10.05.2015 11:25
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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);
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von eulerscheZahl: 10.05.2015 11:37.

10.05.2015 11:35 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Fehler im Programm