Frage von iFeelOffended, 47

Fehler in Java!?

Hallo zusammen.

Bei dem Script dass ihr unten seht ist ein Fehler drin. Hatte das ganze ursprünglich unter javaScript geschrieben, da hat das Programm auch funktioniert. Wahrscheinlich ist da Irgendwo ein Syntax falsch oder sowas relativ simples als ich versucht hab das nach java zu übersetzen...das bekannte "Hello world" hab ich nur drin weil ich wissen wollte ob ich evtl. nen Fehler bei der eingabe in die cmd mache, was aber leider nicht das Problem war.

Also ziel ist es, dass in der cmd nachher die einzelnen Abschnitte untereinander ausgegeben werden, also:

'Sehr geehrte Damen und Herren' 'Heute im Sonderangebot' '3 Schuhe zum Preis von 2' 'Greifen Sie zu!'

Und noch ne andere Sache: wie ihr seht wollte ich den namen von str1. bzw str2. gerne mit der Variablen "i" verbunden haben, also eben str1.i und str2.i ... kann man das einfach so machen, bzw. gibt es eine Möglichkeit das so in die Richtung hin zu bekommen?

Danke schon mal im Voraus!:)

    public class Redirect{

    public static void main(String[] args){

        System.out.println("Hello World!");
    }
string Text = " 'Sehr geehrte Damen und Herren' 'Heute im Sonderangebot' [] '3 Schuhe zum Preis von 2' 'Greifen Sie zu!'[]";
string[] Zeile = Text.split("]");

for (int i= 0; i < Zeile.length; i++) {
    string aktuelleZeile=Zeile[i];
    int w =aktuelleZeile.indexOf('\'');
    int x =aktuelleZeile.indexOf('\'' , w+1);
    int y =aktuelleZeile.indexOf('\'' , x+1);
    int z =aktuelleZeile.indexOf('\'' , y+1);
        if (w > -1 , x > -1 , y > -1 , z > -1) {
            var str1.i = aktuelleZeile.substring(w , x );
            var str2.i = aktuelleZeile.substring(y , z );
        }
    System.out.println(str1.i\r\n str2.i\r\n );
    }
}
Expertenantwort
von KnusperPudding, Community-Experte für Java, 16

Von JavaScript zu Java gibt es schon den ein oder anderen Unterschied..

Also fangen mir mal an:

  • Sofern dein gesamter Code in der Main-Methode stehen sollte, so wäre das erste Problem die Klammersetzung, denn nach System.out... Beendet die geschweifte  Klammer die Main-Methode
  • String sollte vorne groß geschrieben sein.
  • (Anmerkung: Variablen sollte man jedoch klein schreiben, abgesehen von Konstanten. Ist kein Fehler, sondern nur "unschön")
  • "w > -1 , x > -1"  Wennn man mehrere Bedingungen miteinander Verknüpfen möchte, so gibt es den UND Operator: && oder den ODER-Operator: ||    Wodurch es bei dir so aussehen sollte: "w > -1 && x > -1"
  • "var str1.i"   var gibt es in Java nicht. Deklariere deine Variable einfach vorher: String str1;
  • System.out.println(str1.i\r\n str2.i\r\n ); wenn du einen String mit einem Zeilenumbruch verknüpfen willst, sollte dieser als String gekennzeichnet sein: str1 + "\n" In Java gibt es jedoch die Möglichkeit das flexibler zu gestalten und anstatt "\n": System.lineSeparator() verwenden.
Kommentar von KnusperPudding ,

Sollte in etwa so aussehen:

http://hastebin.com/sowukowepe.cs

Kommentar von iFeelOffended ,

öhm....iwie kann ich auf den Link nicht zugreifen...aber hab glaube ich auch so verstanden was ich machen muss, danke!

Kommentar von KnusperPudding ,

Der Link sollte zu einem SourceHoster weiterleiten der den Beispielcode besser darstellt.

Kommentar von iFeelOffended ,

Hmm, ich versuch von zuhause aus noch mal darauf zu zu greifen...

Antwort
von GustavAT, 35

Folgende Fehler sind mir mal auf die Schnelle aufgefallen (korrigiert mich, falsch ich falsch liege, Java ist nicht meine Stärke):

Der Code ab string Text = .... befindet sich außerhalb deiner Main-Methode.

Die Klasse String wird in Java groß geschrieben, also String text = "..."; String[] zeilen ...

Beim indexOf ist ein Hochkomma '

Bedingungen in der if-Anweisung verbindet man mit && bzw || (und, oder) und nicht mit Komma ,

Das var-Keyword gibt es in Java nicht. Du musst den Typ explizit angeben.

Das mit str1.i bzw str.i funktioniert so nicht in Java. Du kannst in Java anders als in JavaScript nicht on-the-fly Objekten Properties zuweisen. Du kannst stattdessen z.B. zwei Variablen von Type String deklarieren und diese dann setzen/ausgeben.

PS: Der obige Code dürfte aber auch in JavaScript spätestens bei var str1.i einen Fehler werfen, da das Objekt str1 nicht definiert ist.

Kommentar von iFeelOffended ,

Vielen Dank, hilft mir auf jeden Fall weiter! Syntax ist nicht so meine stärke wie man sieht:D

Gibt es noch ne andere möglichkeit str1. variabel zuzuweisen? Also wenn die Aufzählung jetzt bspw. nicht nur 4, sondern 4000 Abschnitte beinhaltet wäre das dann doch ein wenig umständlich oder...?^^"

Kommentar von GustavAT ,

Wenn der Text mehrere Abschnitte beinhaltet, würde ich diese in ein Array/Liste einfügen und diese dann ausgeben.

Kommentar von Jonas711 ,

Beim indexOf ist ein Hochkomma '     

Das dürfte in Ordnung gehen, solange in den Hochkommata nur ein Zeichen steht. IndexOf geht auch mit chars.

@Fragesteller: Bei solchen Syntaxproblemen kann eine IDE (z.B. Eclipse) helfen, die diese markiert.

Kommentar von GustavAT ,

Danke, hab jetzt auch erst gesehen, das ' maskiert ist^^

Kommentar von iFeelOffended ,

Kann evtl. einer von euch einmal beispielhaft zeigen wie das mit dem array in java dann aussehen müsste?^^"

Kommentar von Jonas711 ,

In deiner Version brauchst du kein Array, da du die einzelnen Zeilen ja immer unmittelbar während des Schleifendurchlaufs ausgibst und nicht zwischenspeichern musst.

Wenn du aber ein Array nutzen willst, müsstest du es vor der for-Schleife initialisieren: (Array vom Datentyp String mit Namen str1 und Länge zeile.length)

String[] str1 = new String[Zeile.length];

In der Schleife würdest du es dann befüllen: (An Stelle i wird der Substring eingetragen)

str1[i] = aktuelleZeile.substring(w, x);

Nach der Schleife könntest du darauf zugreifen, um die Werte auszugeben: (str[0] gibt den an der Stelle 0 gespeicherten Wert zurück)

System.out.println(str1[0] + System.lineSeparator() + str2[0] + System.lineSeparator());

Ansonsten sind Listen bequem. (Ein Vorteil: Flexible Länge) 

Eine ArrayList würdest du mit den Befehlen (Funktion analog zu denen beim Array) 

ArrayList str1 = new ArrayList<>();

str1.add(aktuelleZeile.substring(w, x));

System.out.println(str1.get(0) + System.lineSeparator() + str2.get(0) + System.lineSeparator());

nutzen. Die ArrayList müsstet du dazu auch importieren. Dazu 

import java.util.ArrayList;

vor den Code setzen.

Kommentar von iFeelOffended ,

Der Tipp mit der ArrayList ist Gold wert, danke!!

Kommentar von Jonas711 ,

Hab aber ein bisschen gepennt, seh ich gerade. 

Du solltest bei der Initialisierung der ArrayList angeben, welchen Datentyp die Einträge haben. Also:

ArrayList<String> str1 = new ArrayList<>();
Kommentar von iFeelOffended ,

okay, ist erledig, klappt jetzt auch.

obwohl ich noch eine Frage hätte:

Könnte man statt:

str1.add(aktuelleZeile.substring(w, x));

auch

str1[i] = aktuelleZeile.substring(w, x) ;

schreiben? Oder geht das nicht wegen des "i"´s ?

Kommentar von GustavAT ,

Eine List kannst du in Java nicht wie ein Array ansprechen. Um ein Element an einem bestimmten Index zu setzen verwendet man die set-Methode, set(index, value). Die ArrayList muss aber dafür über ausreichend Platz verfügen.

Keine passende Antwort gefunden?

Fragen Sie die Community