# indexOf() - was bedeutet -1 ?



## Guest (25. Mai 2005)

Hallo!!!

da bei mir die java API nicht funktioniert und ich in internet noch nich wirklich was passendes gefunden hab seit ihr jetzt meien letzte hoffnung!!

ich verstehe einfach nicht was mit dem befehl *indexOf() *gemeint ist wenn dahinter sowas steht wie *==-1 *oder *<0*

kann mir jemand weiter helfen?


----------



## L-ectron-X (25. Mai 2005)

Das *== -1* oder *< 0* bedeutet soviel, dass nichts gefunden wurde.
Wenn keine Übereinstimmung ermittelt werden konnte, gibt indexOf() einfach -1 zurück.

Die API-Doc gibts auch online:
http://java.sun.com/j2se/1.5.0/docs/api/index.html


----------



## Guest (25. Mai 2005)

also gibt es nur 
==-1 und <0 (keine Übereinstimmung)
und
==1 und >0 (Übereinstimmung) 
?

gibt es auch ==0 oder =<0 oder =>0? und wenn ja was bedeutet das?


----------



## Roar (25. Mai 2005)

lies mal nen buch: www.java-forum.org/de/javabuch
http://www.java-forum.org/de/viewtopic.php?t=1545


----------



## L-ectron-X (25. Mai 2005)

Indizes beginnen mit der Zählung bei 0 (Null). Das kennst du ja auch bspw. von Arrays.
Es ist Sache des Programmierers die Abfragebedingungen zusammenzusetzen.
Eine Prüfung auf *<=0* hätte nicht sehr viel Sinn. Die Abfrage der Bedingung würde immer true zurückgeben.
Eine Prüfung auf *>=0* würde das genaue Gegenteil von *< 0* bedeuten. Sie würde immer zu true ausgewertet werden, wenn eine Übereinstimmung gefunden wurde.


----------



## Dreezard (25. Mai 2005)

also. indexOf() gibt einen int wert zurück. -1 wenn keine übereinstimmung gefunden wird, ansonsten einen numerischen wert der größer oder gleich 0 ist und dir sagt, wo in einem string ein bestimmter buchstabe steckt.

Das andere sind operatoren die etwas vergleichen:

==  -  eine gleichheitsabfrage
<=  -  kleiner oder gleich
>=  -  größer oder gleich
<     -  kleiner
>     -  größer

"Test".indexOf('s')  == -1
das ist also ein vergleich der true (wahr) oder false (falsch) zurückgibt.

Any Questions?

EDIT: btw ist indexOf() kein Befehl sondern eine Methode eines Objektes.


----------



## Dreezard (25. Mai 2005)

> Eine Prüfung auf <=0 hätte nicht sehr viel Sinn. Die Abfrage der Bedingung würde immer true zurückgeben.
> Eine Prüfung auf >=0 würde das genaue Gegenteil von < 0 bedeuten. Sie würde immer zu true ausgewertet werden, wenn eine Übereinstimmung gefunden wurde.


Das ist so nicht ganz richtig.

<= 0  würde true liefern wenn z.B. ein Buchstabe nicht oder am anfang eines Strings steht.


----------



## Guest (25. Mai 2005)

sorry dass ich mich so blöd anstelle!!!

also wenn indexOf()==-1 dann wurde ja keine Ubereinstimmung festgestellt und bei ==1 aber doch

so wenn aber indexOf()==0 da steht dann is mir nich ganz klar was daruntern zu verstehen ist es kann ja nur die beiden Möglichkeiten von ober geben oder nicht?


----------



## mic_checker (25. Mai 2005)

Wenn -1 dann wurde nichts gefunden, wenn 0 dann halt an der ersten Position.


----------



## Dreezard (25. Mai 2005)

moment. wenn man indexOf() == -1 schrebt dann heißt das nicht, dass keine übereinstimmung gefunden wurde, sondern man ÜBERPRÜFT ob eine gefunden wurde.

indexOf() == 0 würde überprüfen ob ein Buchstabe direkt am anfang eines Stings steht. (...1 ob er an der zweiten stelle steht).

indexOf() >= 0 prüft ob etwas gefunden wurde


----------



## mic_checker (25. Mai 2005)

Jo,ich ging nur nicht davon aus das er tatsächlich nen Vergleich meinte....


----------



## L-ectron-X (25. Mai 2005)

Dreezard hat gesagt.:
			
		

> <= 0 würde true liefern wenn z.B. ein Buchstabe nicht oder am anfang eines Strings steht.


@Dreezard: Stimmt!


----------



## Guest (25. Mai 2005)

also noch mal langsam

bei dem programm das ich hier habe soll ein Wort eingegeben werden und dann überprüft werden ob in ihm die Zeichen ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ vorkommen alle andern sollen nicht zulässig sein. auf dem bildschirm soll dann je nach dem "Eingabe korekt" oder "Eingabe nicht korekt" ausgegeben werden.

so sieht der teil des programmes aus der mir schwirigkeiten macht:


```
for(i=0; i < input.length(); i++){
     if ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(input.charAt(i)) ==-1)
     break;
}
```

gebe ich z.B. ein Wort ein das nur Großbuchstaben hat wird "Eingabe korekt" ausgegeben und wenn ich keine Großbuchstaben oder irgendwas anderes eingebe "Eingabe nicht korekt" 

schreibe ich aber ==1 dann ist egal was ich eingebe es kommt immer "Eingabe korekt" das gleiche auch mit ==0

und jetzt?

Edit: Code tags added by Stefan1200.
Bitte das nächste mal selbst machen...


----------



## Dreezard (25. Mai 2005)

öhm. also erstmal kann ich aus diesem bischen code nicht wirklich viel rauslesen. Der vergleich ist ja ganz nett, aber da gibt es effektiveres. Aber egal. Zeig mal n bischen mehr code. Und bitte die Codetags nicht vergessen


----------



## Roar (25. Mai 2005)

if(input.matches("\\w*")) <- so ?


----------



## Guest (25. Mai 2005)

```
public class Test {

  public static void main(final String[] args) {

   System.out.println("Gib etwas ein.");
   String input = StdIn.readln();

   if(eingabetest(input)) {
     System.out.println("Eingabe korrekt");
   } else {
    System.out.println("ungueltige Eingabe");
   }
  }
  
  public static boolean eingabetest(String input){

  int i;
   for(i=0; i < input.length(); i++){
     if ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(input.charAt(i)) ==0)
     break;
   }

   return i==input.length();
  }
}
```


_Edit von L-ectron-X: Code-Tags eingefügt._


----------



## Dreezard (25. Mai 2005)

@ Roar: nich ganz. Gr0ßbuchstaben gehen ja auch nich. Aber frag mich jetzt nich wie genau. Ich kenn mich mit regular expressions garnich aus ^^


----------



## Guest (25. Mai 2005)

bzw:

if ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(input.charAt(i)) ==-1)

oder 

if ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(input.charAt(i)) ==1)


----------



## Dreezard (25. Mai 2005)

warum machst du da einen vergleich ob i so größ ist wie de länge des inputs? Das macht ja überhaupt keinen Sinn. Außerdem: CODETAGS BITTE.

Also so vieleicht:

```
public class Test {

    public static void main(final String[] args) {

        System.out.println("Gib etwas ein.");
        String input = StdIn.readln();

        if(eingabetest(input))
            System.out.println("Eingabe korrekt");
        else
            System.out.println("ungueltige Eingabe");
    }

    public static boolean eingabetest(String input){

    for(int i=0; i < input.length(); i++){   // laufe alle zeichen der eingabe durch
        if ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(input.charAt(i)) ==-1)   // wenn das zeichen nicht in dem String vorkommt
            return false; // gebe falsch zurück
    }

    return true; // wenn alles durch ist gebe wahr zurück
    }

}
```


----------



## Roar (25. Mai 2005)

Dreezard hat gesagt.:
			
		

> @ Roar: nich ganz. Gr0ßbuchstaben gehen ja auch nich. Aber frag mich jetzt nich wie genau. Ich kenn mich mit regular expressions garnich aus ^^


äh?
is nur quatsch weil das auch zahlen zulässt...


----------



## Dreezard (25. Mai 2005)

ahja. Wie gesagt, frag mich zu regEx bloß nix.
Ok ich hätte auch einfach die Klappe halten können ^^


----------



## Guest (25. Mai 2005)

ja dein progamm macht mehr sinn meins war halt nur die vorgabe vom lehrer

aber so ganz klar is mir das leider immer noch nich (ich hoffe die erleuchtung kommt heute noch schreib morgen darüber eine arbeit  :cry: )




			
				Dreezard hat gesagt.:
			
		

> moment. wenn man indexOf() == -1 schrebt dann heißt das nicht, dass keine übereinstimmung gefunden wurde, sondern man ÜBERPRÜFT ob eine gefunden wurde.
> 
> indexOf() == 0 würde überprüfen ob ein Buchstabe direkt am anfang eines Stings steht. (...1 ob er an der zweiten stelle steht).
> 
> indexOf() >= 0 prüft ob etwas gefunden wurde




danach wurde es also heißen dass ==0 überprüft ob A am anfang meines eingegenen wortes steht?


----------



## Bleiglanz (25. Mai 2005)

```
String input = "BINICHDRIN"; 

java.util.List<Character> allowed = new java.util.ArrayList<Character>();
for( Character c : "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".toCharArray()){
    allowed.add(c);
}
java.util.List<Character> given = new java.util.ArrayList<Character>();
for( Character c : input.toCharArray()){
    given.add(c);
}
System.out.println(allowed.containsAll(given));

//oder

boolean alledrin = true;
for(char c : input.toCharArray()){
    alledrin = alledrin && ("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ".indexOf(c) >= 0);
}
System.out.println(alledrin);
```


----------



## Dreezard (25. Mai 2005)

Nein. Nicht sorum wie du den vergleich machst.

Also angenommen wir haben einen char 'B' und einen String "ABC.
"ABC.indexOf('B') würde dir 1 rausschmeißen, weil B an zweiter stelle des Strings steht.

Wenn du überprüfen möchtest wo ein A in deinem wort steht müsstest du also schreiben:

System.out.println("A steht an der " + input.indexOf('A') + ". Stelle");


----------



## Guest (25. Mai 2005)

okay ich glaub das hab ich erstmal verstanden!!!!!!! 

ich glaub ich hab das die ganze zeit mit dem == falsch verstanden weil das ja was vergleicht (aber bei java weis man ja nie obs da nich auch ein paar ausnahmen gibt)

also ich hab das "eigendliche" problem jetzt so verstanden:

==-1 wird geliefert wenn das eingegebene Wort aus mindestens einem anderen Zeichen besteht als vorher festgelegt 

>=0 wird geleifert wenn das eingegebene Wort nur aus den vorher festgelegten Buchstaben besteht

richtig????


----------



## Dreezard (25. Mai 2005)

jain.
also "geliefert" wird von indexOf() nur eine Zahl, die dann mit == ect. verglichen wird. Der rest stimmt ^^


----------



## Guest (25. Mai 2005)

hab eben mal alles ausprobiert und es funktioniert wirklich!!!!!!!

also ein ganz großes dankeschön an alle!!!!!!!!!!


----------



## Stefan1200 (26. Mai 2005)

Kurze Frage: Warum geht bei dir die Java API nicht?
Was kann an einer HTML Datei nicht gehen?


----------

