Input/Output Einlesen funktioniert nur teilweise

nczrfss

Neues Mitglied
Hallo.
Ich bin blutiger Anfänger mit Java und habe ein Problem,
bei dem ich absolut nicht weiter weiß. Und zwar sollen wir vom Informatikunterricht einen Taschenrechner mit dem WindowBuilder programmieren. Das einlesen der ersten Zahl, die man über Buttons eingeben kann, funktioniert auch so weit, jedoch will Java die zweite Zhal partout nicht einlesen. Ich sitze jetzt seit einer gefühlten Ewigkeit vor meinem Quellcode und kann mir selbst nicht helfen. Der Fehler muss darin liegen, dass er "z2" einfach nicht bekommt, aber ich weiß nicht warum, weil es bei "z1" ja klappt.
Der Fehler sollte bei Z160 liegen, da die Meldung erscheint: Fehler2.zahl .

Java:
package trechner;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class TR1 extends JFrame {

	private JPanel contentPane;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TR1 frame = new TR1();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TR1() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBackground(Color.LIGHT_GRAY);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		textField = new JTextField();
		textField.setBounds(10, 11, 392, 52);
		contentPane.add(textField);
		textField.setColumns(10);

		JButton button = new JButton("1");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + 1);
			}
		});

		 // 2 -0 ist jetzt rausgeschnitten der Kürze halber

		button_8.setBounds(7, 176, 89, 23);
		contentPane.add(button_8);

		JButton btnClear = new JButton("Clear");
		btnClear.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText("");
			}
		});
		btnClear.setBounds(313, 210, 89, 23);
		contentPane.add(btnClear);

		JButton btnNewButton_1 = new JButton("+");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + "+");
			}
		});
		btnNewButton_1.setBounds(313, 74, 89, 23);
		contentPane.add(btnNewButton_1);

		JButton button_9 = new JButton("-");
		button_9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + "-");
			}
		});
		button_9.setBounds(313, 108, 89, 23);
		contentPane.add(button_9);

		JButton button_10 = new JButton("*");
		button_10.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + "*");
			}
		});
		button_10.setBounds(313, 176, 89, 23);
		contentPane.add(button_10);

		JButton button_11 = new JButton("/");
		button_11.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + "/");
			}
		});
		button_11.setBounds(313, 142, 89, 23);
		contentPane.add(button_11);

		JButton button_12 = new JButton("=");
		button_12.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + "=");
				char a = 0, r = 0, g = 0;
				String z1 = "", z2 = "";
				int merker1 = 0, merker2 = 0;
				double zahl1 = 0, zahl2 = 0, ergebnis = 0;
				for (int i = 0; i < s.length(); i++) {
					a = s.charAt(i);
					if (a == '+') {
						merker1 = i;
						r = '+';
					}
					if (a == '-') {
						merker1 = i;
						r = '-';
					}
					if (a == '*') {
						merker1 = i;
						r = '*';
					}
					if (a == '/') {
						merker1 = i;
						r = '/';
					}
					if (a == '=') {
						merker2 = i;
						g = '=';
					}
				}
				for (int i = 0; i < merker1; i++) {
					z1 = z1 + s.charAt(i);
				}
				for (int i = merker2 + 1; i < merker2; i++) {
					z2 = z2 + s.charAt(i);
				}
				System.out.println("1.Zahl : " + z1 + "  2.Zahl : " + z2);
				try {
					zahl1 = Double.parseDouble(z1);
				} catch (Exception e) {
					System.out.println("Fehler bei der Eingabe!");
				}
				try {
					zahl2 = Double.parseDouble(z2);
				} catch (Exception e) {
					System.out.println("fehler2.zahl");
				}
				if (r == '+') {
					ergebnis = zahl1 + zahl2;
					System.out.println("Ergebnis : " + ergebnis);
				} else if (r == '-') {
					ergebnis = zahl1 - zahl2;
					System.out.println("Ergebnis : " + ergebnis);
				} else if (r == '*') {
					ergebnis = zahl1 * zahl2;
					System.out.println("Ergebnis : " + ergebnis);
				} else if (r == '/') {
					ergebnis = zahl1 / zahl2;
					System.out.println("Ergebnis : " + ergebnis);
				} else {
					System.out.println("Fehlerhafte Eingabe!");
				}
			}

		});
		button_12.setBounds(205, 176, 89, 23);
		contentPane.add(button_12);

		JButton button_13 = new JButton(".");
		button_13.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s = textField.getText();
				textField.setText(s + ".");
			}
		});
		button_13.setBounds(106, 176, 89, 23);
		contentPane.add(button_13);
	}
}

Ich danke euch im Vorraus!
LG und Frohe Ostern
 

DieKeksmaffia

Mitglied
Hmm... wie wäre es wenn du den String von textField.getText() an einer Leertaste splittest und vor und nach jedem Operator ein " " packst (also: z.B: textField.setText(s + " + ");
Das splitten übernimmt die Methode String.split:
[Java]//ein Beispiel, im textField steht jetzt "5 + 6" ( die Leertasten sind wichtig!)
String s = textField.getText();
// die Methode Split erwartet als Parameter einen String an dessen Stelle gesplittet/der Sting zerteilt werden soll und gibt dem //entsprechend dann ein StringArray zurück
String[] mySplitResult = s.split(" ");
//mySplitResult[0]=="5", mySplitResult[1]=="+", mySplitResult[2]=="6".[/Java]

Alternativ kannst du auch gleich den ganzen String mit einer Klasse ausrechnen, ich besitze so eine (ist aber nicht perfekt):
[Java]/**
* throws NumberFormatException,IndexOutOfBoundsException
*
* Description:
*This class includes the method evaluate(String)
*that evaluates the argument,
*but the argument need space(" ") between operators and values!
*
*can only evaluate the following operators:
* + - * / ( )
*
*
* @version 21.03.2015
* @author DieKeksmaffia
*/
public class OwnCalculator
{
public OwnCalculator(){

}
@SuppressWarnings({ "null", "unused" })
public double evaluate(String arg) throws NumberFormatException, IndexOutOfBoundsException{

ArrayList<Double> allValues = new ArrayList<Double>();
ArrayList<Short> allOperators = new ArrayList<Short>();
String[] myResult = arg.split(" ");

String contendOfBrackets = "";
short numberOfInnerBrackets = 0;
boolean currentInBracket = false;

//adds the values/operators to the ArrayList, Brackets get evaluated by using recursion
CheckForBrackets: for (int i = 0; i<myResult.length;i++){
decide: switch(myResult) {

case "(": if(currentInBracket==true)contendOfBrackets=contendOfBrackets+" "+myResult+" ";
else currentInBracket=true;
numberOfInnerBrackets++;
break decide;

case ")": if(currentInBracket==false) return (Double)null;
numberOfInnerBrackets--;
if (numberOfInnerBrackets==0){
currentInBracket=false;
allValues.add(evaluate(contendOfBrackets));
contendOfBrackets="";
}
else contendOfBrackets=contendOfBrackets+" "+myResult+" ";
break decide;

case "+": if(currentInBracket==true){contendOfBrackets=contendOfBrackets+" "+myResult+" ";}
else allOperators.add((short) 1); break decide;


case "-": if(currentInBracket==true){contendOfBrackets=contendOfBrackets+" "+myResult+" ";}
else allOperators.add((short) 2); break decide;

case "*": if(currentInBracket==true){contendOfBrackets=contendOfBrackets+" "+myResult+" ";}
else allOperators.add((short) 3); break decide;

case "/": if(currentInBracket==true){contendOfBrackets=contendOfBrackets+" "+myResult+" ";}
else allOperators.add((short) 4); break decide;

case " ": break;
case "": break;

default : if(currentInBracket==true)contendOfBrackets=contendOfBrackets+myResult;
else allValues.add(Double.parseDouble(myResult));
break decide;

}
}
//evaluates the the values and operators of "*" and "/"
for(int i = 0; i<allOperators.size(); i++)
{
switch(allOperators.get(i)){
case 3: allValues.set(i, (allValues.get(i)*allValues.get(i+1)));
allValues.remove(i+1);
allOperators.remove(i);
break;
case 4: allValues.set(i, (allValues.get(i)/allValues.get(i+1)));
allValues.remove(i+1);
allOperators.remove(i);
break;
}
}
//evaluates the left values and operators that has to be "+" or "-"
//from right to left of the parameter String and saves it in the double result
double result = allValues.get(0);
for(int i = 0; i<allOperators.size();i++)
{
switch(allOperators.get(i)){
case 1:result=result+allValues.get(i+1);break;
case 2:result=result-allValues.get(i+1);break;
}
}
//if the given String is calculable everything should work and the methods returns the result
return result;
}

}
[/Java]
 
Zuletzt bearbeitet:

fLooojava

Bekanntes Mitglied
Hi,

ich hab zwar nicht alles angesehen aber folgender Codeabschnitt kann eigentlich nie ausgeführt werden:
Java:
for (int i = merker2 + 1; i < merker2; i++) {
					z2 = z2 + s.charAt(i);
				}

Angenommen merker2 sei 10. Dann ist i=11, und somit gilt i < merker2 nie, dementsprechend wird dieser Code nicht ausgeführt.

Es handelt sich hierbei ja um folgenden vereinfachten Code:
Java:
public class JavaForum {

	public static void main(String[] args){
		
		int x=0;
		for(int i=x+1; i<x;i++){
			System.out.println("geht's?");
		}
		System.out.println("nö");

	}
}
... wenn ich micht nich irre. ;)

LG
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
D Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum Java Basics - Anfänger-Themen 6
S Erste Schritte Einlesen / Auslesen funktioniert nicht Java Basics - Anfänger-Themen 9
O Einlesen einer "config.ini" funktioniert plötzlich nicht mehr ! Java Basics - Anfänger-Themen 10
H Passwort einlesen funktioniert nicht wie gewünscht Java Basics - Anfänger-Themen 5
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
H Einlesen Java Basics - Anfänger-Themen 8
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
R txt Einlesen und Verarbeiten Java Basics - Anfänger-Themen 15
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8
K .txt einlesen und in ein Array packen Java Basics - Anfänger-Themen 2
M Erste Schritte Zahlen einlesen und auswerten Java Basics - Anfänger-Themen 6
N Best Practice CSV einlesen - Variables Array?! Java Basics - Anfänger-Themen 8
O Klassen Objektnamen für Methodenaufrauf einlesen lassen Java Basics - Anfänger-Themen 2
D Array Werte einlesen und ausgeben? Java Basics - Anfänger-Themen 8
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
S Werte in Array einlesen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben