Variablen Vergleich funktioniert nicht

chrooomium

Mitglied
So langsam bin ich mit meinem Latein am Ende,
aber das verdammte Programm geht einfach nicht in die markierte if-verzweigung ein, obwohl er mir vorher ausgibt das newString und internArray gleich sind! Ich verstehe den Fehler nicht.. Beides String's, beide gleich und trotzdem scheint irgendwas nicht zu funktionieren.
danke im voraus!




Java:
public void lösche(String newString)
{
	delete = false;
	//String suchen
	for (int i=0; i<(internArray.length); i++)
	{
		System.out.println("internArray:" + internArray[i]);
		System.out.println("newString:" + newString);
		
		[COLOR="Red"]if (newString == internArray[i])[/COLOR]
			{
				System.out.println("deleted!");
				
				delete = true;
				for (int k=i; k<(internArray.length-1); k++)
				{
				internArray[k] = internArray[k+1];
				}
			}
	}
	
	 if (delete)
	{
		tArray = internArray;
		internArray = new String[internArray.length-1];
		
				for (int i=0; i<(internArray.length); i++)
				{
					internArray[i] = tArray[i];	
				}	
	}
	
}
 
Zuletzt bearbeitet:
kennst du google ? hast du jemals ein grundlagenbuch gelesen ?

Object.equals(Object)

btw : [noparse]
Java:
anstatt [/noparse]
 
Habs geändert, danke.
Ne, newString.equals funktioniert ja auch nicht.

edit: Der String wird als Variable übergeben. Wenn ich allerdings ein String "so" Übergebe, mit

Java:
Vektor.lösche("hallo");

funktioniert es.
 
Zuletzt bearbeitet:
Habt recht. Also, neuer Versuch:

Bei einem Vergleich mit

Java:
if (newString.equals(internArray[i]))

ist das Ergebnis genau so wenig true , wie bei einem Vergleich mit

Java:
if (newString == internArray[i])

obwohl er es eigentlich müsste, da mir vorher zwei gleiche Strings ausgeprintet werden.

Java:
System.out.println("internArray:" + internArray[i]);  // Ergibt beispielsweise hi
System.out.println("newString:" + newString);  //  // Ergibtauch hi

Meiner Meinung nach müsste der vergleich also auch "true" sein und die Anweisungen der if-Konstruktion (wie nennt man das eigentlich, eine Verzweigung ists ja nicht, oder?) ausgeführt werden.

So, hoffe das war verständlich, bin ein bisschen überstürzt vorgegangen.
 
> Der String wird als Variable übergeben. Wenn ich allerdings ein String "so" Übergebe [..]

genau so ist der Unterschied normalerweise wenn man == statt equals verwendet,
falls du das immer noch irgendwo falsch hast, korrigiere es, ansonsten solltest du zum Posten eines vollständigen
kleinen Testprogramms auch mit main-Methode übergehen,
dann kann jede in wenigen Minuten bis Sekunden den Fehler sehen

> Meiner Meinung nach müsste der vergleich also auch "true" sein

müsste müsste, aber ist eben nicht, Leerzeichen in Strings? Länge vergleichen, jedes Zeichen einzeln,
falls das Programm von Benutzereingaben abhängt, nutzt natürlich auch mehr Code hier nicht unbedingt etwas
 
edit: Der String wird als Variable übergeben. Wenn ich allerdings ein String "so" Übergebe, mit
Wie hast du´s denn erst gemacht? Sehe da grade nicht den springenden Punkt, weshalb es mit "hallo" gehen sollte und mit
Java:
String newString = "wasauchimmer";
Vektor.loesche(uebrugens vorzugsweise ohne Umlaute)(newString) nicht.

EDIT:
Also bei mir gehts das Folgende:
Java:
String internArray[] = new String[] {"hi"};
String newString = "hi";
if (newString.equals(internArray[0])) System.out.println("läuft");
 
Zuletzt bearbeitet:
Hier die Methode in der der Dienst aufgerufen wird:

Java:
import sum.kern.*;
import sum.werkzeuge.*;

public class ErsterThread implements Runnable {

Bildschirm b;
Maus m;	
Buntstift s;
Uhr u;
Tastatur t;
CopyOfVektor v;
boolean endlos;

String outp;


public ErsterThread(Bildschirm pB)

{
	b = pB;
	m = new Maus();
	s = new Buntstift();
	t = new Tastatur();
	v = new CopyOfVektor(b);
}

public void run()
{
	endlos = false;
	while (endlos == false)
	{
		
		// fügeHinzu Button
		if ((m.hPosition()>100) && (m.hPosition()<200) && (m.vPosition()>100) && (m.vPosition()<150) && (m.istGedrueckt()))
		{
			outp = "";
			
			
			do
			{
				if (t.wurdeGedrueckt())
				{
					outp = outp + t.zeichen();
					t.weiter();
				}
				
			} while (!((m.hPosition()>300) && (m.hPosition()<450) && (m.vPosition()>300) && (m.vPosition()<350) && (m.istGedrueckt())));
			v.fügeHinzu(outp);
			
			
		}
		
		
		
		
		// lösche Button
		if ((m.hPosition()>250) && (m.hPosition()<350) && (m.vPosition()>100) && (m.vPosition()<150) && (m.istGedrueckt()))
		{
			outp = "";
		
			
			do
			{
				
				if (t.wurdeGedrueckt())
				{
					outp = outp + t.zeichen();     //Die letzte Tastatureingabe wird dem String hinzugefügt
					t.weiter();     //Das Zeichen im Tastaturpuffer wird gelöscht
				}
				
			} while (!((m.hPosition()>300) && (m.hPosition()<450) && (m.vPosition()>300) && (m.vPosition()<350) && (m.istGedrueckt())));
			v.lösche(outp);     /Hier wird der obige Dienst aufgerufen
		}
		
	}

}
}

Ich weiß, der Code ist sicher nicht ganz sauber, die es gibt wahrscheinlich bessere Lösungen als mit den SuM-Klassen zu arbeiten und eine Endlos-schleife sollte man auch nicht schreiben, aber bin wie gesagt noch ziemlicher Anfänger.
Die fügeHinzu methode funktioniert übrigens.
 
Wie hast du´s denn erst gemacht? Sehe da grade nicht den springenden Punkt, weshalb es mit "hallo" gehen sollte und mit
Java:
String newString = "wasauchimmer";
Vektor.loesche(uebrugens vorzugsweise ohne Umlaute)(newString) nicht.

EDIT:
Also bei mir gehts das Folgende:
Java:
String internArray[] = new String[] {"hi"};
String newString = "hi";
if (newString.equals(internArray[0])) System.out.println("läuft");

Das ist's ja, ich verstehe auch absolut nicht warum es nicht geht.
 
Nachdem ich es nochmal mit
Java:
 String.equals()
probiert habe und jetzt nochmal mit dem normalen Vergleich funktioniert es, ich verstehe es nicht, es ist immer noch exakt der gleiche code wie der den ich hier gepostet habe..
Irgendwie muss eclipse gesponnen haben oder so, ich checks nicht.
 

Neue Themen


Zurück
Oben