Erste Schritte Problem bei Anfängerprogramm

Hilighter

Mitglied
Liebe Netzgemeinede,

ich befasse mich seit kurzem etwas mit Java. Hab mir auch schon denke ein bisschen Wissen angeeignet.
Eine Übungsaufgabe, zu der ich leider keine Lösungen habe, stellt mich nun jedoch vor große Schwierigkeiten. Bei dem "Programm" werden die Vokale eines vorher eingegebenen Wortes gezählt.
Bei mir kommt jedoch egal bei welchere Eingabe heraus, dass 0 Vokale in dem Wort wären, was aber nicht stimmt. (baue ja extra viele Vokal ein)

Ich benutze Excilipse

Hier mal der Quellcode :


Java:
package vokalzahler;
import javax.swing.JOptionPane;
public class Vokalzaehler {

	public static void main(String[] args) {
		String eingabe;
		int laenge;
		int vokale;
		
		eingabe=JOptionPane.showInputDialog("Geben sie bittte das Wort ein welches auf Vokale untersucht werden soll");
		laenge=eingabe.length();
		
		zaehler z =new zaehler();
		z.zahler(laenge,eingabe);
		vokale=z.zahler(laenge, eingabe);
		
		JOptionPane.showMessageDialog(null, "Es sind " + vokale + " Vokale in dem Wort " + eingabe);
		
		
		

	}

}

nun noch meine zaehler class.

Java:
package vokalzahler;

public class zaehler {
	private int x=0; //Nummer des Buchstabes
	private int vokal=0;// Gibt die Anzahl der Vokale an
	public int laen;
	private int qu; // Übernimmt laenge aus Vokalzähler
	private String einga; //übernimmt eingabe aus Vokalzähler
	private char buchstabe; //nimmt den Buchstaben der postion x
	private int f;
	
	public int zahler(int qu,String einga)
	{ 
		for(x=0; x<=qu; x++)
		{
			buchstabe=einga.charAt(f);
			
			switch (buchstabe)
			{
			case'a': 
				++vokal;
				++f;
				break;
			case'e':
				++f;
				++vokal;
				break;
			case'i':
				++f;
				++vokal;
				break;
			case'u':
				++f;
				++vokal;
				break;
			}
		}
				return vokal;
	}
					}

Ihr müsst mir keine vollen Lösungsvorschläge machen. Ein kleiner Tipp wo der Fehler liegt würde reichen. Will ja noch was lernen :rtfm:
Vielen Dank
 
Zuletzt bearbeitet:
1) Variablen, die eh im Methodenkopf übergeben werden, brauchst du nicht extra deklarieren. Solange sie im Kopf stehen, werden sie dort deklariert. Dementsprechend hättest du sonst zwei Variablen, wobei die lokalen, in der Methode vorhandenen, dann Vorrang haben.

Java:
    private int qu; // Übernimmt laenge aus Vokalzähler
    private String einga; //übernimmt eingabe aus Vokalzähler

Kannst du dir also sparen.

2) Klassennamen sollte man immer großschreiben.

3) Wieso rufst du die Methode zahlen zweimal auf und verwendest beim ersten Mal nicht einmal den Rückgabewert?

4) Du initialisierst alle deine Variablen außerhalb der Methode, setzt sie aber nie wieder zurück. Einmal aufgerufen gibt dir also deine Methode vielleicht das richtige Ergebnis, beim zweiten Mal aber definitiv nicht mehr.

5) Deine Zählschleife ist falsch. Es muss
Code:
(x = 0; x < qu; x++)
heißen, nicht
Code:
(x = 0; x <= qu; x++)
.

6)
Code:
f
wird nur hochgezählt, wenn du einen Vokal gefunden hast. Warum überhaupt
Code:
charAt(f)
statt
Code:
charAt(x)
? Die Variable kannst du dir auch schenken.

7) Versuch das mal alles umzusetzen, vor allem schritt 3+4 und schau dann, ob es das tut, was du eigentlich möchtest. 🙂

Java:
    public int zaehlen(int qu, String einga)
    {
        int vokal = 0;
        char buchstabe;
        for (int x = 0; x < qu; x++)
        {
            buchstabe = einga.charAt(x);

            switch (buchstabe)
            {
                case 'a':
                    vokal++;
                    break;
                case 'e':
                    vokal++;
                    break;
                case 'i':
                    vokal++;
                    break;
                case 'u':
                    vokal++;
                    break;
            }
        }
        return vokal;
    }
 
Zuletzt bearbeitet:
jetzt hab ich es:
du zählst dein f wenn dein buchstabe kein vokal ist bleibt dein f stehen

entweder du nimmst das x was eh hochzählt in der schleife (dafür sind die ja)
oder zähls dein f immer hoch am ende der schleife

würde aber dann schief gehen wenn du einen zweiten string parsed ohne ein neuen zähler zu initialisieren
da er nirgens wieder genullt wird
 
Vielen Dank für die schnelle gute Hilfe 🙂

Ich hab des f gegen das x ausgetauscht (keine Ahnung weswegen ich des getrennt habe) und die Variablen in der Methode initialisiert und schwups hat es funktioniert 😉. Nochmal vielen Dank 😉
 
Probiere einmal das:

Java:
public class Vokalzaehler {

	public static int suchVokale(String text) {
		
		int count=0;
		char[] vokale = {'a','e','i','o','u'};
		char[] buffer = text.toCharArray();
		
		for(int a=0; a<buffer.length;a++) {
			for(int b=0;b<vokale.length;b++) {
				if (buffer[a] == vokale[b])
					count++;
			}
		}
		return count;
	}
	
	public static void main(String[] args) {
		
		String text = "das ist ein test";
		System.out.println("Der Text: "+text+" enthält "+suchVokale(text)+" Vokale");
	}
}

Pentalon
 
Vielen Dank. Ich hab des auch mal von dir abgeschrieben, nur verstehe noch ein paar Sachen davon nicht. Denke ist aber weiter nicht schlimm, da ich ja noch am lernen bin. Trotzdem nochmal vielen Dank.
 

Zurück
Oben