Variablen Wie Variable verfügbar machen?

marian04

Aktives Mitglied
Hallo Leute,

ich muss euch mal wieder was fragen, da ich keinen einzigen Schritt weiter komme :

Ich habe folgenden Code ( gekürzt):

Code:
 private void button2ActionPerformed(java.awt.event.ActionEvent evt) {
	  
	  
	  jp1.remove(textLabel1);
	  lese_Datei();
	  
	
	  
  }
  

  
 public void lese_Datei(){
		
		  
		try {
			BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\schneiderm\\Desktop\\test.log"));
			String line;
			
			x= RGen.nextInt(10);
			
			
			for(int i=1;i<x;i++) 
			{     
				line = in.readLine();
                String[] splittArray = line.split("\\.");
			    textLabel.setText(splittArray[0]);
	            textLabel1.setText(splittArray[1]);
	             }
			 in.close();
	    } catch (IOException e) {
	      System.out.println("Fehler beim Lesen der Datei");
	   }
		
	  }

Nun wollte ich die beiden Teile des SplittArrays im Actionlistener nutzen.
Geht aber leider nicht.
Eclipse wirft mir dann ständig Fehler aus, mit denen ich nichts anfangen kann.

Also kam ich dann auf die Idee, dass eine void Funktion keinen Rückgabewert leifert ich aber gerne die Teile des Arrays als Rückgabewert hätte.
Aber leider komme ich mit

Code:
public String lese_Datei(){	
	try {
			BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\schneiderm\\Desktop\\test.log"));
			String line;
			
			x= RGen.nextInt(10);
			
			
			for(int i=1;i<x;i++) 
			{     
				line = in.readLine();
                String[] splittArray = line.split("\\.");
			    textLabel.setText(splittArray[0]);
	            textLabel1.setText(splittArray[1]);
	             }
			 in.close();
	    } catch (IOException e) {
	      System.out.println("Fehler beim Lesen der Datei");
	   }
		return splittArray[0];
	  }

Dann bekomme ich den Fehler, dass splittArray[0] auf keine Variable zurückzuführen ist.

Kann mir jemand sagen, was ich falsch mache ?


Liebe Grüße
 
Du musst das array splittArray VOR dem try-catch block deklarieren.
Variablen eine Lebensdauer und das return steht an einer Stelle wo dein Array nicht mehr "lebt" bzw einfach nicht mehr vorhanden ist. Daher musst du es vorher deklarieren (vor try-catch) damit es beim return noch vorhanden ist.
 
Du musst String[] splittArray am Anfang der Methode deklarieren, damit die Variable auch für die ganze Methode verfügbar ist.

Java:
public String lese_Datei(){	

       String[] splittArray;

	try {
			BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\schneiderm\\Desktop\\test.log"));
			String line;
			
			x= RGen.nextInt(10);
			
			
			for(int i=1;i<x;i++) 
			{     
				line = in.readLine();
                splittArray = line.split("\\.");
			    textLabel.setText(splittArray[0]);
	            textLabel1.setText(splittArray[1]);
	             }
			 in.close();
	    } catch (IOException e) {
	      System.out.println("Fehler beim Lesen der Datei");
	   }
		return splittArray[0];
	  }

EDIT: Grrr, war zu langsam...
 
Code:
public String lese_Datei(){ 
 
       String[] splittArray;
 
    try {
            BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\schneiderm\\Desktop\\test.log"));
            String line;
            
            x= RGen.nextInt(10);
            
            
            for(int i=1;i<x;i++) 
            {     
                line = in.readLine();
                splittArray = line.split("\\.");
                textLabel.setText(splittArray[0]);
                textLabel1.setText(splittArray[1]);
                 }
             in.close();
        } catch (IOException e) {
          System.out.println("Fehler beim Lesen der Datei");
       }
        return splittArray[0];
      }

Führt bei mir wieder zu folgenden Fehlermeldungen :
1. the local variable splittArray may not have been initialized

Und im ActionListener ein paar zeilen oben drüber :
2.Cannot resolved to a variable

;(
 
Code:
String[] splittArray = null;
Versuch es mal so, dann sollte er hoffentlich nicht mehr meckern.
Das Problem hier ist einfach, dass der Compiler es nicht mag, wenn man lokale Variablen nicht initialisiert. Aber oft weiß man am Anfang nicht was rein soll bzw. kann man sie erst im try-catch-Block füllen...Daher muss man dass dann halt so lösen (einfach ein Standartwert nehmen der später eh überschrieben wird)

Wobei ich sagen muss, dass ich nicht weiß ob er hier einfach [c]null[/c] akzepiert, aber irgendwas musst du ihm zuweisen.

Und deine zweite Frage kann ich grad nicht nachvollziehen? (Code evtl?)
 
Bleibt immernoch der Fehler im Anhang, haeb der einfachheit halber mal ein Screenshot davon gemacht
 

Anhänge

  • Fehler.jpg
    Fehler.jpg
    51,7 KB · Aufrufe: 31
ah...
Das musst du anders schreiben in den ActionListener:
Java:
String text = lese_Datei();

Und dann kannst du mit dem String machen was du willst. Wenn du den Rückgabewert einer Methode benutzen willst musst du ihn auch in einer Variable speichern 🙂
 
Ah Okay,

ist es auch möglich beide Werte zurück zu geben ?

Code:
....
return splittArray[0];
return splittArray[1];
....

Führt bei mir nicht gerade zu Erfolgen, sondern mal wieder zu einem Fehler :'(
 
Du kannst nur einen Wert zurückgeben.
Gib doch statt dem String ein String[] zurück wenn du alle Werte brauchst.
 
Es geht so auch nicht
Aber du könntest das komplette Array zurückgeben
Java:
//ActionListener
public void actionPerformed(ActionEvent ae){
String[] str = lese_Datei();

//Was auch immer du damit vorhast
}


public String[] lese_Datei(){
String[] array = ...
...

return array;
}

So grob gesehen 🙂 Hoffe das hilft, wollt nicht so viel Code schreiben ^^
 
Zuletzt bearbeitet:
Natürlich führt dass zu Fehlern, du solltest dich vielleicht ein bisschen mit der Java Syntax und den Grundlagen beschäftigen.
Eine Methode hat bei Java immer keinen oder EINEN rückgabewert.
Willst du in dem Fall beides zurückgeben könntest du beispielsweise einfach das Array zurückgeben welches du vom Split befehl bekommst......
Es gibt noch weitere Möglichkeiten, sind aber zuviele um alle jetzt zu erläutern..

#EDIT:
Ich seh schon ich war zu langsam ^_^


Aber du solltest dir wirklich definitiv nochmal die Grundlagen zu Gemüte führen
 
Nö, geht nur 1 return. Kannst aber auch splitArray zurückgeben und das dann danach wieder auseinandernehmen.
 
Es ist keine gute IDee das Array mit null zu initialisieren und dann per index darauf zu arbeiten. Die Rückgabe des arrays gehört in den try Block. Am Ende der Methode kannst du im Fehlerfall null zurückgeben. Oder die Exception weiterwerfen.

Du kannst nicht 2 Strings zurückgeben. Allerdings könntest du die Methode umbauen um das ganze Array zurückzugeben.
 

Neue Themen


Zurück
Oben