if- Abfrage

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hi,

ich möchte eine Abfrage machen wo ich eine lange Wurst dafür brauchen würde, also:


Code:
if (text == "dies" || text == "das" || text == "jenes" || text == "wasanderes" usw.........

Wie kann man das anders machen, Ich weiß was daherkommen kann, kann ich das ganze in ein Array geben und dann irgendwie abfragen

Code:
if (arr.contains("dies")
{
}
else
Wie kann ich das am Besten machen?
 

ARadauer

Top Contributor
arraylist würd ich nehmen

zb
Code:
ArrayList<String> arr = new ArrayList<String>();
		arr.add("bier");
		arr.add("schnaps");
		if(arr.contains("bier"))
			System.out.println("yeah bier");
		if(arr.contains("wein"))
			System.out.println("yeah wein");
 

The_S

Top Contributor
Außerdem vergleicht man Strings (wie auch Objekte allgemein) mit == und nicht mit equals.
 

MQue

Top Contributor
kann ich die ArrayList auch irgendwie gleich initialisieren:

z.B.:

Code:
 ArrayList<String> descr = new ArrayList<String>() {"bier", "schnaps","wein"};

So wie oben gehts nicht aber ist es irgendwie möglich mit einem enum oder so?
 

ARadauer

Top Contributor
ja equals statt == verwenden.
== ist das gleiche objekt
equals schaun nur gleich aus

ist ein häufiger fehler, wenn wenn man beim Testen, für manuelle Eingaben, Strings verwendet
zb sowas:

Code:
String xx ="XXX";
if(xx=="XXX")
	System.out.println("geht");
funktioniert, da Java das XXX cached und beides mal, das selbe Objekt verwendet.

wenn man jedoch bei sowas XXX eingibt:
Code:
String xx ="XXX";
		if(xx=="XXX"){
			System.out.println("geht");
		}else{
			System.out.println("geht nicht");
		}
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		 String name = bin.readLine();

		if(xx==name){
			System.out.println("geht");
		}else{
			System.out.println("geht nicht");
		}
klappt es nicht, da meine Eingabe nich zum selben Objekt wird. also equals verwenden
 
G

Guest

Gast
Michael1234 hat gesagt.:
kann ich die ArrayList auch irgendwie gleich initialisieren:
Klar:

Code:
import java.util.Arrays;
import java.util.List;
// ...
List<String> alkoholika = Arrays.asList("bier", "schnaps", "wein");


Fred
 

The_S

Top Contributor
@Fred

Naja, dann haste aber ne List und keine ArrayList. Für ne ArrayList sind auch wieder mehrere Schritte notwendig

Code:
List<String> list = Arrays.asList(new String[] {"asdf", "aksld"});
ArrayList<String> al = new ArrayList<String>();
al.addAll(list);
 

lhein

Top Contributor
oder die hardcore Variante:

Code:
public static enum Key
    {
        DIES("dies"),
        DAS("das"),
        JENES("jenes"),
        UNKNOWN("unbekannt");
        
        private String key;
        
        private Key(String key)
        {
            this.key = key;
        }
        
        /* (non-Javadoc)
         * @see java.lang.Enum#toString()
         */
        @Override
        public String toString()
        {
            return this.key;
        }
        
        public static Key getKeyForString(String key)
        {
            Key k = null;
            
            if (DIES.key.equals(key)) k = DIES;
            else if (DAS.key.equals(key)) k = DAS;
            else if (JENES.key.equals(key)) k = JENES;
            else k = UNKNOWN;
            
            return k;
        }
    }
    
    public static void main(String[] args)
    {
        String test = "nix";
        Key key = Key.getKeyForString(test);
        
        switch(key)
        {
        case DAS:   System.out.println("Es ist DAS...");
                    break;
        case DIES:  System.out.println("Es ist DIES...");
                    break;
        case JENES: System.out.println("Es ist JENES...");
                    break;
        default:    System.out.println("Es ist nichts von allem...");
        }
    }

:bahnhof: :autsch: :lol:
 
G

Guest

Gast
Na, wenns unbedingt eine ArrayList sein muss (wobei ich nicht sehe, warum das nötig sein sollte):

Code:
ArrayList<String> alkoholika = new ArrayList<String>(Arrays.asList("bier", "schnaps", "wein"));


Fred
 
G

Guest

Gast
Man kann auch bei den Arrays bleiben:

Code:
String[] alkoholika = {"bier", "schnaps", "wein"};

boolean c = Arrays.binarySearch(alkoholika, "cola") >= 0;
boolean w = Arrays.binarySearch(alkoholika, "wein") >= 0;

System.out.println("Cola: " + c);
System.out.println("Wein: " + w);

Da ist es bloß wichtig, dass das Array aufsteigend sortiert ist! Notfalls einmalig mit Arrays.sort sortieren.
 

ms

Top Contributor
Code:
List<String> list = Arrays.asList(new String[] {"asdf", "aksld"});
ArrayList<String> al = new ArrayList<String>();
al.addAll(list);
Die Methode Arrays.asList(...) liefert zwar eine ArrayList, dass ist aber keine java.util.ArrayList sondern eine java.util.Arrays.ArrayList.

ms
 

quippy

Bekanntes Mitglied
Äh, ist es nicht völlig egal, ob das nun eine ArrayList oder eine PopelList ist, hauptsache, es implementiert "List" ?!

Also ehrlich, mir wäre das persönlich ja sowas von wurscht - "contains" gibt es, iterieren kann man's ... So What?
 

ms

Top Contributor
quippy hat gesagt.:
Äh, ist es nicht völlig egal, ob das nun eine ArrayList oder eine PopelList ist, hauptsache, es implementiert "List" ?!

Also ehrlich, mir wäre das persönlich ja sowas von wurscht - "contains" gibt es, iterieren kann man's ... So What?
Probier mal dass hier:
Code:
		List<String> popelList = Arrays.asList(new String[] {"asdf", "aksld"});
		popelList.add("geht oder geht nicht?");

In diesem Fall wirft die add-Methode eine UnsupportedOperationException.

ms
 

quippy

Bekanntes Mitglied
OK, da wird das Interface nicht komplett implementiert, weil das Array hier Konstant sein soll... Der Sinn hinter Interfaces ist das aber nicht!

Aber für die Aufgabe des Threadstarters (der brauchte das ja wohl konstant, wenn ich das richtig verstanden hatte) wäre es trotzdem egal gewesen.

Auf jeden Fall widerstreben mir solche Konstrukte:
Code:
private static final ArrayList<String> alkoholika = new ArrayList<String>(Arrays.asList(new String[] {"asdf", "aksld"}));

bei denen mehrere Objekte für die Müllhalde erzeugt werden, nur um eine ArrayList aus Konstanten zu bekommen. Da würde ich mir doch überlegen, das per Hand im Konstruktor der Klasse selbst zu formulieren (außer natürlich, der Wert muß bereits *vor* dem super(); im konstruktor gesetzt sein) - wobei ich immer noch glaube, daß bei der obigen Formulierung keiner ein "add" brauchen wird, denn das widerspricht der Intention.
 
G

Guest

Gast
quippy hat gesagt.:
Auf jeden Fall widerstreben mir solche Konstrukte [...] bei denen mehrere Objekte für die Müllhalde erzeugt werden
Warum? "Short-living-objects" sind doch die Lieblingsspeise des generational garbage collectors.

quippy hat gesagt.:
Da würde ich mir doch überlegen, das per Hand im Konstruktor der Klasse selbst zu formulieren (außer natürlich, der Wert muß bereits *vor* dem super(); im konstruktor gesetzt sein)
Wieso im Konstruktor? Mach das doch im class initializer. Und wenn wir schon dabei sind, können wir auch gleich auf ein HashSet umsteigen, weil Suche im HashSet sehr viel schneller ist (O(1)) als Suche in einem sortierten (O(log n)) oder gar einem unsortierten Array (O(n)).


Code:
import java.util.HashSet;
import java.util.Set;

class Foo
{
	private static final Set<String> alkoholika;
	
	static
	{
		alkoholika = new HashSet<String>();
		alkoholika.add("bier");
		alkoholika.add("schnaps");
		alkoholika.add("wein");
	}

	// ...
	
	public void bar(String s)
	{
		if (alkoholika.contains(s))
		{
			// ...
		}
		else
		{
			// ...
		}
	}
}


Fred
 

quippy

Bekanntes Mitglied
Anonymous hat gesagt.:
quippy hat gesagt.:
Da würde ich mir doch überlegen, das per Hand im Konstruktor der Klasse selbst zu formulieren (außer natürlich, der Wert muß bereits *vor* dem super(); im konstruktor gesetzt sein)
Wieso im Konstruktor? Mach das doch im class initializer. Und wenn wir schon dabei sind, können wir auch gleich auf ein HashSet umsteigen

Das meinte ich, als ich das mit dem "*vor* super()" sagte - hatte nur keine Lust, das jetzt auszuformulieren - der Kern der Aussage war, den Kram eben auszuformulieren - egal wo!

Das mit dem HashSet ist natürlich auch richtig. Ich denke da immer nicht dran, weil ich bei einer Hashtable und Verwandtschaft immer an eine Zuordnung [key, Value] denke... :autsch:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
D Mehrdimensionale Abfrage Allgemeine Java-Themen 15
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
kodela Binäre Abfrage Allgemeine Java-Themen 12
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
2 If-Abfrage um Uhrzeit einzuordnen Allgemeine Java-Themen 2
F Java ip abfrage mit Dateiausgabe ? Allgemeine Java-Themen 2
V Java Editor Problem mit ! bei if-Abfrage Allgemeine Java-Themen 5
N Schlüsselworte if abfrage ob linke oder rechte maustaste gedrückt ist Allgemeine Java-Themen 5
H args abfrage vereinfachen Allgemeine Java-Themen 7
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
B Kapselung if-Abfrage bei "MVC-verteilten" Listenern Allgemeine Java-Themen 5
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
S if-Abfrage Allgemeine Java-Themen 5
T Wiederholte Abfrage? Allgemeine Java-Themen 5
B abfrage ob file ausgeführt wurde Allgemeine Java-Themen 4
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
P Google Abfrage auslesen Allgemeine Java-Themen 2
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
W ICQ Status Abfrage mit Java Allgemeine Java-Themen 3
M if - else Abfrage beenden Allgemeine Java-Themen 4
MQue if- Abfrage Allgemeine Java-Themen 4
B Abfrage ob JRE installiert ist, JAR automatisch starten Allgemeine Java-Themen 5
MQue if Abfrage Allgemeine Java-Themen 27
C Versionsstring Abfrage Allgemeine Java-Themen 7
G Tastatur abfrage Allgemeine Java-Themen 8
D Doppeltverschachtelte if-Abfrage Allgemeine Java-Themen 10
Z mit java htaccess - abfrage bestätigen/umgehen Allgemeine Java-Themen 2
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G Problem mit if-Abfrage bei Benutzeingabe Allgemeine Java-Themen 2
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
U IF-Abfrage Allgemeine Java-Themen 17
H Java-Abfrage Allgemeine Java-Themen 9
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
F Java Passwort abfrage Allgemeine Java-Themen 2
S CDDB-Abfrage mit Java unter Linux? Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
G Abfrage in datenbank Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben