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)
--- Java lernen 2 (http://www.informatikerboard.de/board/thread.php?threadid=2144)


Geschrieben von javaneu am 27.02.2015 um 01:26:

  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



Geschrieben von Karlito am 27.02.2015 um 03:28:

 

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



Geschrieben von javaneu am 27.02.2015 um 12:01:

 

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?



}



Geschrieben von eulerscheZahl am 27.02.2015 um 15:53:

 

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.



Geschrieben von javaneu am 27.02.2015 um 17:06:

 

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



Geschrieben von javaneu am 27.02.2015 um 17:08:

 

Brauche ich hier auch keine for schleife ?



Geschrieben von eulerscheZahl am 27.02.2015 um 17:48:

 

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)?



Geschrieben von javaneu am 27.02.2015 um 20:15:

 

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



Geschrieben von eulerscheZahl am 27.02.2015 um 20:26:

 

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?



Geschrieben von javaneu am 27.02.2015 um 20:46:

 

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



Geschrieben von eulerscheZahl am 28.02.2015 um 06:05:

 

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?



Geschrieben von javaneu am 28.02.2015 um 11:12:

 

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 ?



Geschrieben von javaneu am 28.02.2015 um 11:15:

 

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.



Geschrieben von eulerscheZahl am 28.02.2015 um 11:27:

 

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.



Geschrieben von javaneu am 28.02.2015 um 11:34:

 

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

Welches package muss ich includieren woher weiss ich das?

Alles Neuland für mich?


Forensoftware: Burning Board, entwickelt von WoltLab GmbH