Vergleich von Arrays < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:44 Mi 23.11.2011 | Autor: | mikexx |
Aufgabe | Hallo, liebes Forum!
Ih muss eine Java Methode schreiben, die zwei char-Array vergleicht und die soll "true" zurückgeben, wenn die beiden miteinander verglichenen Arrays die gleichen Elemente in der gleichen Reihenfolge haben.
Ich nenne diese Methode mal
public boolean vergleicheArrays(char[]x,char[]y) |
Meine Idee ist:
public boolean vergleicheArrays(char[]x,char[]y){
boolean sindGleich=false;
for(int i=0; i<x.length;i++){
if(x[i]==y[i]){
sindGleich=true;}
else break;
}
return sindGleich;
}
Was meint ihr?
Was macht man aber, wenn zwei Mengen vergleichen möchte, die die leere Menge sind? Dann würde hier glaube ich "false" rauskommen, obwohl der Vergleich "true" liefern muss.
|
|
|
|
Hallo mikexx,
> Hallo, liebes Forum!
>
> Ih muss eine Java Methode schreiben, die zwei char-Array
> vergleicht und die soll "true" zurückgeben, wenn die
> beiden miteinander verglichenen Arrays die gleichen
> Elemente in der gleichen Reihenfolge haben.
>
> Ich nenne diese Methode mal
>
> public boolean vergleicheArrays(char[]x,char[]y)
> Meine Idee ist:
>
> public boolean vergleicheArrays(char[]x,char[]y){
>
> boolean sindGleich=false;
>
> for(int i=0; i<x.length;i++){
> if(x==y){
> sindGleich=true;}
> else break;
> }
>
> return sindGleich;
> }
>
>
>
> Was meint ihr?
>
Hier musst Du doch erst alle
Elemente der Arrays miteinander vergleichen.
Beenden kannst Du diese Methode, wenn
zwei Elemente der Arrays verschieden sind.
> Was macht man aber, wenn zwei Mengen vergleichen möchte,
> die die leere Menge sind? Dann würde hier glaube ich
> "false" rauskommen, obwohl der Vergleich "true" liefern
> muss.
Den Fall musst Du vor Beginn der Schleife abfangen.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:57 Mi 23.11.2011 | Autor: | mikexx |
Ich weiß aber nicht, wie ich das machen kann.
Erstmal alle Elemente miteinander vergleichen...
Wie macht man das??
|
|
|
|
|
Hallo mikexx,
> Ich weiß aber nicht, wie ich das machen kann.
>
> Erstmal alle Elemente miteinander vergleichen...
>
> Wie macht man das??
>
Da musst Du nur beim Vergleich innerhalb der Schleife etwas ändern.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:11 Mi 23.11.2011 | Autor: | mikexx |
Meinst du:
(Nehme mal die Originalbezeichnungen jetzt:)
public boolean equals(char[]x,char[]y){
boolean equal=false;
boolean equal1;
if(x.length=0 && y.length=0){equal=true;}
for(int i=0;i<x.length;i++){
equal1=(x[i]==y[i]);
if(equal1=true){equal=true;}
else break;
}
return equal;
}
??
|
|
|
|
|
moin,
Du hast hier noch einen entscheidenden Denkfehler drinn.
Nimm dir mal die beiden Arrays:
x = [1,1,2,3,4,5]
y = [1,2,3,4,5,6]
die sind offensichtlich nicht gleich.
Dein Programm macht jetzt folgendes:
Es guckt sich die erste Stelle an, sieht die sind gleich, und setzt dann deine Variable auf true.
Dann guckt es sich die beiden zweiten Stellen an, sieht dort, dass sie verschieden sind, und bricht ab.
Es wird also true zurückgegeben...
Überleg dir nochmal wie du das beheben kannst bzw. wie du dein Programm abändern musst damit es tatsächlich das macht was du willst.
Davon abgesehen fand ich deine Version im ersten Post übersichtlicher als die jetzige, selbst wenn sie den selben logischen Fehler enthielt, aber das musst du wissen welche du haben möchtest.
lg
Schadow
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:27 Mi 23.11.2011 | Autor: | mikexx |
Ich glaube, ich weiß, was Du meinst.
Ich muss das
equal=false;
als Allererstes in den Rumpf der For-Schleife schreiben.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:35 Mi 23.11.2011 | Autor: | mikexx |
Dann werde ich das morgen Früh mal kompilieren lassen und ausführen und mal sehen, ob es hinhaut.
Wenn ich das theoretisch durchgehe, kommt es jedenfalls hin.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 09:56 Do 24.11.2011 | Autor: | mikexx |
Müsste ich nicht noch den Fall abfangen, daß ein Array die leere Menge ist und das andere nicht?
Also quasi:
if((x.length=0 && y.length !=0) || (x.length !=0 && y.length=0)){
equal=false;}
vor das, was ich hatte schreiben?
|
|
|
|
|
Hallo!
jein.
Ich würde noch vor der FOR-Schleife den Wert equal=true setzen. Erst in der FOR-Schleife wird er ggf. auf FALSE gesetzt.
Wenn ein String die Länge 0 hat, wird die FOR-Schleife nicht ein einziges mal durchlaufen, weil die Abbruchbediungng sofort erfüllt ist. es gilt dann immernoch equal==true, und das wird zurück gegeben.
Aber du denkst dennoch in die richtige Richtung. Du solltest am Anfang noch prüfen, ob einer der Strings die Länge 0 hat, sondern generell, ob sie überhaupt gleich lang sind. Tust du das nicht, dann knallts (falls y kürzer als x ist).
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 10:37 Do 24.11.2011 | Autor: | mikexx |
Wenn ich dann leere Menge mit leerer Menge vergleiche:
Würde dann nicht aber false ausgegeben nach dem, was Du vorschlägst?
Und wenn eines der Arrays leer ist, das andere aber nicht?
Hab wohl noch nicht ganz verstanden, wie Du das meinst.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 10:48 Do 24.11.2011 | Autor: | mikexx |
Meine "neue" Idee wäre dann:
public boolean equals (char[] a, char[] b){
boolean equal=false;
boolean equall;
if(a.length==0 && b.length==0){
equal=true;}
if(a.length==b.length){
for(int i=0; i<a.length; i++){
equal=false;
equall=(a[i]==b[i]);
if(equall=true){
equal=true;}
else break;
}
}
return equal;
}
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:26 Do 24.11.2011 | Autor: | mikexx |
Ich habe verschiedene Beispiele durchgetestet.
Bei einem Beispiel bin ich stutzig geworden:
Ich habe {g,f,c,d} mit {a,c,d,f} verglichen und da kommt komischerweise heraus: "true"---
Wo liegt der Fehler in meinem Code, sodaß dies herauskommt?
|
|
|
|
|
Hallo mikexx,
> Ich habe verschiedene Beispiele durchgetestet.
>
> Bei einem Beispiel bin ich stutzig geworden:
>
> Ich habe {g,f,c,d} mit {a,c,d,f} verglichen und da kommt
> komischerweise heraus: "true"---
>
> Wo liegt der Fehler in meinem Code, sodaß dies
> herauskommt?
Der Fehler liegt darin, dass die Schleife bei unterschiedlichen
Array-Elementen, die Felde komplett durchläuft.
Es sollte doch so sein, daß die Schleife bei einem
fehlgeschlagenen Vergleich (false) sofort abgebrochen wird.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:21 Do 24.11.2011 | Autor: | mikexx |
Wo muss ich dazu etwas im Code ändern?
Ich sehe das nicht, auch, wenn ich schon stundenlang teste.
|
|
|
|
|
Hallo mikexx,
> Wo muss ich dazu etwas im Code ändern?
>
> Ich sehe das nicht, auch, wenn ich schon stundenlang teste.
Die if-Abfrage sollte ungefähr so aussehen:
1: |
| 2: | if(a.length==b.length){
| 3: | equal=true;
| 4: | for(int i=0; i<a.length; i++){
| 5: | equal=(a[i]==b[i]);
| 6: | if (!equal) break;
| 7: | }
| 8: | }
|
Gruss
MathePower
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:48 Do 24.11.2011 | Autor: | mikexx |
Ah!! Ein Licht geht mir auf.
Vielen, vielen lieben Dank, es funktioniert nun ENDLICH!
Ganz liebe Grüße!!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:39 Fr 25.11.2011 | Autor: | Loddar |
Na toll, der nächste mit so'ner Ego-Aktion.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:48 Fr 25.11.2011 | Autor: | mikexx |
Sorry, aber es geht lediglich darum, daß der Tutor davor gewarnt hat, daß sowas als "Klauen aus dem Internet" missverstanden werden könnte, wenn man Codes über google findet, die man dann abgibt.
Man hat sie sich zwar selbst erarbeitet, aber das weiß der Tutor ja nicht.
Ich werde zukünftig dann immer andere Bezeichnungen als die in der Aufgabenstellung wählen, damit sowas nicht nochmal passiert.
|
|
|
|