Hallo ihr Lieben,
Ich habe ein "kleines" Problem mit meinem Taschenrechner den ich für die Uni programmieren soll. Er soll nur +,-,*,/ können. So weit so gut.
Eigentlich bin ich auch schon fast fertig, habe jetzt aber einen "Fehler" den ich einfach nicht rausbekomme und der mich zur völligen Verzweiflung bringt.
Also der Fehler liegt darin, dass wenn ich etwas rechnen möchte er mir zum Beispiel bei 2+2 nur eine 2 ausgibt. Gebe ich aber 2+2+ ein bekomme ich 4 raus. Das heißt ich weiß schon mal,dass er die 2te Zahl "übersieht". Sitze da jetzt schon 3 Tage dran und habe einfach keine Idee mehr wie ich das weg bekommen könnte, weil ich mir auch nicht richtig sicher bin an welchem Teil im Code es liegt und hoffe jetzt,dass Ihr mir da irgendwie helfen könntet.
Und dann hätte ich noch eine zweite Frage, nämlich soll ich den Taschenrechner so programmieren, dass man nur eine 0 am Anfang eingeben kann, also zum Beispiel 02.
Ich weiß hier ,dass ich mit einer If-Abfrage machen kann und einem boolean. Nur weiß ich nicht so recht ob das in die Funktion Tastendruck kommt oder in die Funktion Rechnen?
Ich hoffe ihr könnt damit etwas anfangen und es sind genügend Informationen.
Und bin euch jetzt schon mal sehr dankbar für eure Hilfe
Mit freundlichen Grüßen.
Hier also die Controllerklasse, meine Klasse mit der Rechnen-Funktion und die Main.
Ich habe ein "kleines" Problem mit meinem Taschenrechner den ich für die Uni programmieren soll. Er soll nur +,-,*,/ können. So weit so gut.
Eigentlich bin ich auch schon fast fertig, habe jetzt aber einen "Fehler" den ich einfach nicht rausbekomme und der mich zur völligen Verzweiflung bringt.
Also der Fehler liegt darin, dass wenn ich etwas rechnen möchte er mir zum Beispiel bei 2+2 nur eine 2 ausgibt. Gebe ich aber 2+2+ ein bekomme ich 4 raus. Das heißt ich weiß schon mal,dass er die 2te Zahl "übersieht". Sitze da jetzt schon 3 Tage dran und habe einfach keine Idee mehr wie ich das weg bekommen könnte, weil ich mir auch nicht richtig sicher bin an welchem Teil im Code es liegt und hoffe jetzt,dass Ihr mir da irgendwie helfen könntet.
Und dann hätte ich noch eine zweite Frage, nämlich soll ich den Taschenrechner so programmieren, dass man nur eine 0 am Anfang eingeben kann, also zum Beispiel 02.
Ich weiß hier ,dass ich mit einer If-Abfrage machen kann und einem boolean. Nur weiß ich nicht so recht ob das in die Funktion Tastendruck kommt oder in die Funktion Rechnen?
Ich hoffe ihr könnt damit etwas anfangen und es sind genügend Informationen.
Und bin euch jetzt schon mal sehr dankbar für eure Hilfe
Mit freundlichen Grüßen.
Hier also die Controllerklasse, meine Klasse mit der Rechnen-Funktion und die Main.
Java:
package application;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.event.ActionEvent;
public class ControllerRechner
{
@FXML Label lblErgebnis;
@FXML Button zahl0;
@FXML Button zahl1;
@FXML Button zahl4;
@FXML Button zahl7;
@FXML Button zahl8;
@FXML Button zahl5;
@FXML Button zahl2;
@FXML Button zahl9;
@FXML Button zahl6;
@FXML Button zahl3;
@FXML Button opPlus;
@FXML Button opMin;
@FXML Button opMal;
@FXML Button opDurch;
@FXML Button btnGleich;
@FXML Button btnLoeschen;
int ergebnis = 0;
private boolean nullgedrueckt;
TestRechner rechner = new TestRechner();
@FXML
public void Tastendruck(MouseEvent event)
{
if ( lblErgebnis.getText() == "0")
{
lblErgebnis.setText("");
}
String eingabe = ((Button)event.getSource()).getText();
lblErgebnis.setText(lblErgebnis.getText()+ eingabe);
ergebnis = rechner.rechnen(eingabe);
}
@FXML
public void istGleich()
{
lblErgebnis.setText("" + ergebnis);
}
@FXML
public void loeschen(ActionEvent event)
{
lblErgebnis.setText("0");
rechner.clear();
}
Java:
package application;
import javafx.scene.control.Alert;
public class TestRechner
{
private int zwischenergebnis = 0;
private int aktuelleZahl = 0;
private String rechenzeichen = "+";
public int rechnen(String zeichen)
{
switch(zeichen)
{
case "1":
zahlDruecken(1);
break;
case "2":
zahlDruecken(2);
break;
case "3":
zahlDruecken(3);
break;
case "4":
zahlDruecken(4);
break;
case "5":
zahlDruecken(5);
break;
case "6":
zahlDruecken(6);
break;
case "7":
zahlDruecken(7);
break;
case "8":
zahlDruecken(8);
break;
case "9":
zahlDruecken(9);
break;
case "0":
zahlDruecken(0);
break;
case "+":
zeichenDruecken("+");
break;
case "-":
zeichenDruecken("-");
break;
case "*":
zeichenDruecken("*");
break;
case "/":
zeichenDruecken("/");
break;
}
return zwischenergebnis;
}
public void zahlDruecken(int zahl)
{
aktuelleZahl = 10 * aktuelleZahl + zahl;
}
public void zeichenDruecken(String z)
{
switch(rechenzeichen)
{
case "+":
zwischenergebnis = zwischenergebnis + aktuelleZahl;
break;
case "-":
zwischenergebnis = zwischenergebnis - aktuelleZahl;
break;
case "*":
zwischenergebnis = zwischenergebnis * aktuelleZahl;
break;
case "/":
try
{
if(aktuelleZahl != 0);
{
zwischenergebnis = zwischenergebnis / aktuelleZahl;
break;
}
}
catch (ArithmeticException ex)
{
Alert error = new Alert (Alert.AlertType.INFORMATION);
error.setTitle("Fehler bei Division");
error.setHeaderText(ex.getMessage());
error.setContentText(ex.toString());
error.showAndWait();
}
break;
}
aktuelleZahl = 0;
rechenzeichen = z;
}
public void clear()
{
aktuelleZahl=0;
rechenzeichen="+";
zwischenergebnis=0;
}
}
Java:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.fxml.FXMLLoader;
public class Main extends Application
{
public void start(Stage primaryStage)
{
try
{
AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("RecherLayout.fxml"));
Scene scene = new Scene(root,320,350);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
root.setId("AnchorPane");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
launch(args);
}
}