matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenJavaJAVA
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]