Probleme beim umwandeln eines String zu einem Int Wert

  • Themenstarter Themenstarter RobinHH1
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

RobinHH1

Gast
Hallo hier is mein Quelltext,
ich wollte ansich erreichen, dass das "Programm" mit einem Knopfdruck aus dem String einen Int Wert macht und diesen dann mit 5 addiert. Wäre sehr nett wenn mir jemand einen Tipp geben kann, die Fehlermeldung bei blueJ lautet:

"local variable zwischenspeicher1 is accessed from within inner class; needs to be declared final"

Hier ist der Quelltext:
Code:
 Das ist mein Code
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
*
* Beschreibung
*
* @version 1.0 vom 04.12.2007
* @author
*/

public class TextAufsAndereTextFeldÜbertragen extends java.applet.Applet {
// Anfang Variablen
TextArea eingabeFeld;
Label ausgabeFeld;
String eingegebenerText;
String auszugebenderText;
String auszugebenderText1;
Button starter;
Button starter1;
Button starter2;
int zwischenspeicher;
int zwischenspeicher1;
// Ende Variablen

public void init() {
eingabeFeld = new TextArea ("Bitte Text eingeben",20,20);
starter = new Button ("Fühe ein dreifaches HSV ein!");
ausgabeFeld = new Label ("");
starter1 = new Button ("Den Text in das nächste Feld übertragen");
starter2 = new Button ("Die eingegebene Zahl wird mit 5 addiert");
int zwischenspeicher1;
int zwischenspeicher2;

setLayout (new GridLayout (2,3,8,5));
add (eingabeFeld);
add (starter);
add (starter1);
add (ausgabeFeld);
add (starter2);

starter1.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent e) {
eingegebenerText = eingabeFeld.getText ();
ausgabeFeld.setText (eingegebenerText);
}});

starter.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent e) {

eingegebenerText = eingabeFeld.getText ();
auszugebenderText = eingegebenerText.substring (0,eingegebenerText.length()/2);
auszugebenderText1 = eingegebenerText.substring (eingegebenerText.length ()/2,eingegebenerText.length());
ausgabeFeld.setText (auszugebenderText + " HSV HSV HSV " + auszugebenderText1);


starter2.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent e) {

eingegebenerText=eingabeFeld.getText();
zwischenspeicher1=Integer.parseInt(eingegebenerText);//nimmt den eingegebenen text und macht ihn zu einer zahl
zwischenspeicher1+=5;//addiert auf die umgewandelten string (jetzt int) 5
eingegebenerText=Integer.toString(zwischenspeicherZahl);//wandelt die zahl wieder in einen string unm
ausgabeText=eingegebenerText;
ausgabeFeld.setText(ausgabeText);

}});



}});
}
}


MFG RobinHH😉
 
Soo hab das ganze mal ein wenig umgeschriben so dass es läuft... Waren noch ein Paar andere Fehler ausser das mit der Inner-Class drin 😛

Code:
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

/**
 * 
 * Beschreibung
 * 
 * @version 1.0 vom 04.12.2007
 * @author
 */

public class TextAufsAndereTextFeldÜbertragen extends JFrame {
	// Anfang Variablen
	private TextArea eingabeFeld;

	private Label ausgabeFeld;

	private String eingegebenerText;

	private String auszugebenderText;

	private String auszugebenderText1;

	private Button starter;

	private Button starter1;

	private Button starter2;
	
	private int zwischenspeicher;

	private int zwischenspeicher1;

	public TextAufsAndereTextFeldÜbertragen() {
		eingabeFeld = new TextArea("Bitte Text eingeben", 20, 20);
		starter = new Button("Fühe ein dreifaches HSV ein!");
		ausgabeFeld = new Label("");
		starter1 = new Button("Den Text in das nächste Feld übertragen");
		starter2 = new Button("Die eingegebene Zahl wird mit 5 addiert");

                  //int zwischenspeicher1; 
                  //int zwischenspeicher2;      beide Variabeln sind schon member = shadowing. Macht keinen Sinn hier.

		setLayout(new GridLayout(2, 3, 8, 5));
		add(eingabeFeld);
		add(starter);
		add(starter1);
		add(ausgabeFeld);
		add(starter2);

		starter1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				eingegebenerText = eingabeFeld.getText();
				ausgabeFeld.setText(eingegebenerText);
			}
		});

		starter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				eingegebenerText = eingabeFeld.getText();
				auszugebenderText = eingegebenerText.substring(0,
						eingegebenerText.length() / 2);
				auszugebenderText1 = eingegebenerText.substring(
						eingegebenerText.length() / 2, eingegebenerText
								.length());
				ausgabeFeld.setText(auszugebenderText + " HSV HSV HSV "
						+ auszugebenderText1);

			}
		});

		starter2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				eingegebenerText = eingabeFeld.getText();
				zwischenspeicher1 = Integer.parseInt(eingegebenerText);
				zwischenspeicher1 += 5;

				int zwischenspeicherZahl = 0;

				eingegebenerText = Integer.toString(zwischenspeicherZahl);

				String ausgabeText = eingegebenerText;
				ausgabeFeld.setText(ausgabeText);

			}
		});

		setVisible(true);
	}

	public static void main(String[] args) {
		new TextAufsAndereTextFeldÜbertragen();
	}
}

Noch ein Paar Sachen:

1:
Code:
int zwischenspeicher1; 
int zwischenspeicher2;
Nicht notwendig da du diese variabeln schon als member variabeln deklariert hast.

2:
Du hast glaube ich ein durcheinander mit den klammern gemacht, sprich ein ActionListener in der ActionPerformed Funktion eines anderen ActionListeners geaddet...

3:
Ich würde dir schwer raten die Variabeln namen noch einmal zu überdenken 😛 und ein paar Member Variabeln sind überflüssig, da sie auch einfach lokale variabeln sein könnten.

4:
Zu deimen Fehler in Inner-Classes die in Funktionen gemacht werden, kann man keine Non-Final Variabeln brauchen von dieser Funktion. Funkioniert mit dem obigen Code aber.
 
Da steht doch schon alles was du machen musst in der Fehlermeldung. 🙂

Wenn du eine lokale Variable innerhalb einer inneren Klasse benutzt musst du diese als final deklarieren. Sonst geht das nicht.

Das heißt für dich überall wo z.B.
Code:
 new ActionListener () { ... }
steht musst du gucken welche Variablen du verwendest und ob die Existens dieser Variablen gewährleistet ist. Bei zwischenspeicher1 ist dies z.B. nicht der fall. Also gehört da ein final vor.
 
Danke schonmal im voraus, ich werde mir das jetzt nochmal angucken und gebe dann nochmal bescheid ob es geklappt hat...es sind auch wie gesagt Anfängerfehler😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben