www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Java" - JAVA
JAVA < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

JAVA: String
Status: (Frage) beantwortet Status 
Datum: 10:28 Fr 18.02.2005
Autor: crux

Hallo,
hab ein Problem mit JAVA... soll eine statische Methode schreiben, mit Parameter des Typs String-Array und Rückgabewert boolean. boolean soll true sein, wenn an einer Stelle des Arrays drei aufeinander folgende Positionen den gleichen String-Inhalt haben.

Mein Lösungsansatz ist:
public static boolean DreiGleicheHintereinander(){
String[]s = {"t", "st", "st", "nm"};
for (int i=0; i<s.length-2;i++){
if (s[i].equals(s[i+1])){
if (s[i].equals(s[i+2]))
System.out.println("true");
return true;
}

}
System.out.println("false");
return false;
}

Bei den meisten Werten funktioniert der Code... aber wenn vor-vorletzes und vorletztes gleich sind, das letzte nicht, gibt es keine Ausgabe... weiß jemand warum? Es scheint in die erste if-schleife reinzugehen und dann abzubrechen... oder so ähnlich... ich hoffe ihr könnt mir helfen...schonmal danke

Ich habe diese Frage in keinem anderen Forum gepostet

        
Bezug
JAVA: genauere Schilderung des Probs
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:42 Fr 18.02.2005
Autor: crux

Sobald im String 2 gleiche Werte hintereinander kommen geht es in die erste if-Schleife und bei der 2. if ist es ja falsch- aber warum geht es dann nicht normal mit meiner for-Schleife weiter sondern beendet es? Danke

Bezug
                
Bezug
JAVA: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:58 Fr 18.02.2005
Autor: crux

habe eben festgestellt, dass ich bei der 2. if schleife die Klammern {} vergessen habe- aber das hinzutun der Klammern löst leider mein Problem nicht... weil es dann anscheinend nicht immer zu einem return befehl kommt... aber warum... wenn bei den if schleifen während der for schleife nie ein true kommt müsste es doch schliesslich zu dem false führen, nachdem die for schleife beendet ist...???

Bezug
        
Bezug
JAVA: Fehler in der if Schleife?!
Status: (Antwort) fertig Status 
Datum: 11:00 Fr 18.02.2005
Autor: marthasmith

das hier ist ja dein Programmtext:

public static boolean DreiGleicheHintereinander(){
String[]s = {"t", "st", "st", "nm"};
for (int i=0; i<s.length-2;i++){
    if (s[i].equals(s[i+1])){
         if (s[i].equals(s[i+2]))
die kommende Anweisung wird ausgeführt wenn true
                System.out.println("true");
die kommende Anweisung wird immer wenn das erste if true ist
ausgeführt. Die Funktion wird  am Ende der if - Schleife beendet, das soll wohl nicht so sein, eher soll wohl das true erstmal zwischengespeichert werden, bis du durch alle Indices durch bist?

         return true;
    }
}
System.out.println("false");
return false;
}

Bezug
                
Bezug
JAVA: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:10 Fr 18.02.2005
Autor: crux

Ja, das Problem ist, das es nach der 2. if Schleife beendet- aber eigentlich ist da ja noch nicht meine for-Schleife zu Ende.,.. warum wird es dann trotzdem beendet? Zunächst war das primäre Problem das Vergessen der Klammer{} aber das hinzufügen hat dazu geführt das nicht immer ein return befehl ausgeführt wird was ich nicht verstehe... wenn die for schleife unerfolgreich (die if-schleifen ergeben nicht true) ausgeführt worden ist, müsste es doch einfach den false wert zurückgeben?!
warum führt es die for schleife nicht weiter aus, nach der 2. if schleife(also wenn die bedingung nicht erfüllt ist)?


Bezug
                        
Bezug
JAVA: Antwort
Status: (Antwort) fertig Status 
Datum: 11:37 Fr 18.02.2005
Autor: Marc


> Ja, das Problem ist, das es nach der 2. if Schleife
> beendet- aber eigentlich ist da ja noch nicht meine
> for-Schleife zu Ende.,.. warum wird es dann trotzdem
> beendet? Zunächst war das primäre Problem das Vergessen der
> Klammer{} aber das hinzufügen hat dazu geführt das nicht
> immer ein return befehl ausgeführt wird was ich nicht
> verstehe... wenn die for schleife unerfolgreich (die
> if-schleifen ergeben nicht true) ausgeführt worden ist,
> müsste es doch einfach den false wert zurückgeben?!
>  warum führt es die for schleife nicht weiter aus, nach der
> 2. if schleife(also wenn die bedingung nicht erfüllt
> ist)?


Dein Programm:
1: public static boolean DreiGleicheHintereinander(){
2:    String[]s = {"t", "st", "st", "nm"};
3:    for (int i=0; i<s.length-2;i++){
4:       if (s[i].equals(s[i+1])){
5:          if (s[i].equals(s[i+2]))
6:             System.out.println("true");
7:          return true;
8:
9:       }
10:    }
11:    System.out.println("false");
12:    return false;
13: }


verbessertes Programm:

1: public static boolean DreiGleicheHintereinander(){
2:    String[]s = {"t", "st", "st", "nm"};
3:    for (int i=0; i<s.length-2;i++){
4:       if (s[i].equals(s[i+1])){
5:          if (s[i].equals(s[i+2])){
6:             System.out.println("true");
7:             return true;
8:          }
9:       }
10:    }
11:    System.out.println("false");
12:    return false;
13: }


Hier habe ich --wie von marthasmith vorgeschlagen-- ein Klammerpaar in Zeile 5 und 8 eingefügt.

Das bewirkt nun, dass die Anweisung in Zeile 7 nur ausgeführt wird, wenn auch die innerste IF-Abfrage erfüllt ist.
Vorher wurde sie nämlich auch ausgeführt, egal ob die innerste IF-Abfrage erfüllt war oder nicht.

Dies ein typischer Fehler (nicht nur bei Java): Nach einer IF-Abfrage wird exakt eine Anweisung oder exakt ein Anweisungsblock ausgeführt. Im ersten Programm war dies nur die Zeile 6, im zweiten Programm sind dies aber (durch die Klammersetzung) die Zeilen 6 und 7.

Viele Grüße,
Marc


Bezug
                                
Bezug
JAVA: DANKE
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:45 Fr 18.02.2005
Autor: crux

Danke für eure Hilfe- oh man, was so bisschen Klammer immer alles bewirkt ;) jetzt läuft das Ding.

Bezug
                
Bezug
JAVA: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:11 Fr 18.02.2005
Autor: marthasmith

da ich Java nicht kann :o)
hier einfach ein Pseudocode:

j = 0;

for(i = 0 to i = length(s1-2))
{
     if (s1[i] == s2[i] and s1[i] == s2[i+1] and s1[i] == s2[i+2])
             index[j++] = i;
}
if( j > 0)
return true;
else
  return false;


du hast dann am Ende ein array in dem die Indizes von s1 stehen,
so dass die nächsten beiden Zeichen mit denen aus s2 identisch sind.#

Die Vergleiche musst du jetzt quasi nur noch mit Java Code machen.


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]