Java lernen 2

Neue Frage »

Auf diesen Beitrag antworten »
javaneu Java lernen 2

Meine Frage:
Ich habe auch gerade bei einer weiteren Aufgabe probleme ,die ich poste:

Erstellen Sie eine Klasse Strings mit einer Klassenmethode public static void substrings(String
s, int len).
Diese soll untereinander alle Teilstrings von s ausgeben, die die Länge len haben, beim Eingabestring
"ABCDEF" und len == 3 also:
ABC
BCD
CDE
DEF
1
Wenn len kleiner als 1 oder größer als der String s ist, soll allerdings stattdessen "FEHLER: Keine
Teilstrings!" ausgegeben werden.
Hinweis: Nutzen Sie die Methode String.substring.


Diesen teil habe ich irgendwie versucht zu proggen:

Wenn len kleiner als 1 oder größer als der String s ist, soll allerdings stattdessen "FEHLER: Keine
Teilstrings!" ausgegeben werden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public class Strings
{
   public static void substrings(String s, int len){
       
       
       if(len <1 || len >s ){
           system.out.println(" Fehler: Keine Teilstrings ");
        
        }
    
    }
}


Aber habt ihr paar tips für mich für diesen Aufgabenteil:

Diese soll untereinander alle Teilstrings von s ausgeben, die die Länge len haben, beim Eingabestring
"ABCDEF" und len == 3 also:

Hier habe ich grad sau die Schwierigkeiten auf einen Ansatz zu kommen?

Meine Ideen:
gepostet
 
Auf diesen Beitrag antworten »
Karlito

Mit len>s vergleichst Du Äpfel mit Birnen, da len eine Zahl ist und s ein String, d.h. eine Zeichenkette. In Java kann man die Länge von Zeichenketten mit .length() abfragen. Korrekt wäre also:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class Strings
{
	public static void substrings(String s, int len){
		if(len <1 || len >s.length() ){
			System.out.println(" Fehler: Keine Teilstrings ");
		}
	}
}


Weiterhin kann man von Strings einen Substring mit .substring(x,y) erzeugen, wobei x der Startindex und y der Endindex ist. Das Zeichen unter dem Endindex wird dabei nicht mit ausgegeben.

Schau dir mal folgendes Programm an und versuche es zu verstehen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public class Strings
{
	public static void main(String[] args){
		String testString = "Test";
		System.out.println(testString.substring(0,3)); 
		System.out.println(testString.substring(0,4));
		System.out.println(testString.substring(0,testString.length()));
		System.out.println(testString.substring(2,4));
	}
}


VIelleicht bekommst Du damit schon einen Ansatz für das Programm. Wenn da noch fragen sind, bitte gern nachfragen.

Gruß,

Karlito
Auf diesen Beitrag antworten »
javaneu

Das Problem ist ja ,dass immer der zweite Index an der ersten Stelle kommt und das alphabet weiter geht.

Warum berücksichtige ich da dann nur noch den ersten und den letzten?

Zuerst muss ich doch eine for schleife erstellen oder ?

for( int s = 0 , s> s.length(), i++){

hier irgendwie if Bedingung?



}
Auf diesen Beitrag antworten »
eulerscheZahl

Die Methode substring interessiert sich nur dafür, von wo bis wo du die Zeichen haben möchtest - dass es sich hier um den Anfang des Alphabets handelt, ist komplett egal.

Zitat:
for( int s = 0 , s> s.length(), i++){

aber s ist doch bereits ein String, wie soll es da plötzlich ein int sein?
Ich nehme an, du wolltest es so schreiben:
for (int i = 0; i < s.length(); i++) { Teilstring ausgeben}
Du gehst hier aber zu weit: Wenn du in deinem Beispiel erst bei F startest, kannst du keine 3 Zeichen mehr ausgeben.
 
Auf diesen Beitrag antworten »
javaneu

Ich möchte ja bei a starten ,aber wie erkläre ich das dem Computer ( bluej) großes Grinsen
Auf diesen Beitrag antworten »
javaneu

Brauche ich hier auch keine for schleife ?
Auf diesen Beitrag antworten »
eulerscheZahl

Natürlich brauchst du eine Schleife.
Aber die musst sich auch richtig schreiben:
die Teile werden durch ';' getrennt, nicht durch ','.
und du solltest die Schleifenvariable durchgehend i nennen, schließlich ist s schon vergeben

Wenn wir uns man nur auf das gegebene Beispiel konzentrieren und dort ABC, BCD, CDE, DEF ausgeben wollen, wie kriegst du das mittels substring hin (erst mal ohne Schleife, um die kümmern wir uns später)?
Auf diesen Beitrag antworten »
javaneu

Es wird ja immer der zweite Buchtabe an den Anfang der nächsten Zeile gehängt?

Die Methode substring interessiert sich nur dafür, von wo bis wo du die Zeichen haben möchtest - dass es sich hier um den Anfang des Alphabets handelt, ist komplett egal.

Es sind ja immer 3 buchtaben ?

Vielleciht noch ein Tipp großes Grinsen
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
"ABCDEF".substring(0,3)

liefert dir "ABC".
code:
1:
"ABCDEF".substring(1,4)

liefert "BCD".

Erkennst du ein Muster? Wie macht sich das Es sind ja immer 3 buchstaben bemerkbar?
Auf diesen Beitrag antworten »
javaneu

Man muss einfach die erste Zahl erhönen und die 2te auch oder ?

substring(0,3)
ABC

substring (1,3)

BCD

substring (2,5)

CDE

substring (3,6)

DEF


Aber das implementieren ist wieder eine andere Sache verwirrt
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Man muss einfach die erste Zahl erhönen und die 2te auch oder ?

richtig, deshalb auch substring (1,4).

Versuchen wir es doch mal mit einer Schleife:
code:
1:
2:
3:
for (int i = 0; i < s.length(); i++) {
    System.out.println(s.substring(i, i+3));
}

Das liefert schon mal ABC, BCD, CDE, DEF.
Wenn du das ausführst, wirst du 2 Dinge feststellen:
- es werden immer 3 Zeichen ausgegeben, egal, das du an die Funktion übergibst
- java.lang.StringIndexOutOfBoundsException: String index out of range: 7, das heißt, es wird versucht, auf einen Teil außerhalb des Strings zuzugreifen.

Korrekturvorschläge?
Auf diesen Beitrag antworten »
javaneu

Soll ich das hier includieren oder wie ?
java.lang.StringIndexOutOfBoundsException: String index out of range: 7, das heißt, es wird versucht, auf einen Teil außerhalb des Strings zuzugreifen.


Woher weiss denn die Schleife genau das es bei DEF aufhört ?

Von dem s.length oder wie ?
Auf diesen Beitrag antworten »
javaneu

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public class Strings
{
   public static void substrings(String s, int len){
       
       
       if(len <1 || len >s.length() ){
           system.out.println(" Fehler: Keine Teilstrings ");
        
        }
        
        for (int i = 0; i < s.length(); i++) {
    System.out.println(s.substring(i, i+3));
}
    
    }
}


Mir wird jetzt nur ein Fehler angezeigt ,dass ein package fehlt.
Auf diesen Beitrag antworten »
eulerscheZahl

Das weiß die Schleife genau dann, wenn du es ihr mitteilst.
i < s.length() geht schon zu weit, du musst früher abbrechen.

Wenn du zitieren willst, geht das mit [quote]Zitattext[/quote], dann weiß ich, dass ich den Teil nur überfliegen muss.

Und Fehlermeldungen bitte immer im genauen Wortlaut.
Auf diesen Beitrag antworten »
javaneu

i =< s.length(3,6) ?

Welches package muss ich includieren woher weiss ich das?

Alles Neuland für mich?
Auf diesen Beitrag antworten »
javaneu

Fehler package System does not exist .
Auf diesen Beitrag antworten »
eulerscheZahl

=< gibt es nicht, das musst du umdrehen.
length() nimmt keine Argumente entgegen.
System.out (mit großem 's'), daher vermutlich auch das package Problem

code:
1:
2:
3:
4:
5:
6:
7:
8:
public static void substrings(String s, int len) {
	if (len < 1 || len > s.length()) {
		System.out.println(" Fehler: Keine Teilstrings ");
	}
	for (int i = 0; i <= s.length() - len; i++) {
		System.out.println(s.substring(i, i + 3));
	}
}
Auf diesen Beitrag antworten »
javaneu

Was bewirkt dieses - len?
Auf diesen Beitrag antworten »
eulerscheZahl

In der Schleife?
dass eben nicht bis zum Ende des strings gegangen wird, sondern nur soweit, wie es noch möglich ist, mit substring len Zeichen zu nehmen.
Auf diesen Beitrag antworten »
javaneu

Alles klar danke .

Ich poste vielleicht später nochmal eine Aufgabe.
Ich versuche im moment Java zu lernen .
Auf diesen Beitrag antworten »
javaneu

Weisst du zufällig wo man eclipse für java holen kann.

Das problemlos funktioniert .

Icg glaube mit eclipse zu lernen ist vielleicht besser.
Auf diesen Beitrag antworten »
eulerscheZahl

Ich habe es von da:
https://eclipse.org/downloads/
Auf diesen Beitrag antworten »
javaneu

Ok danke ich melde mich vielleicht bald mit einer neuen Aufgabe.
 
Neue Frage »
Antworten »


Verwandte Themen

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