Hallo,
ich habe einen Taschenrechner nach diesem Tutorial nach programmiert.
Ich möchte den Taschenrechner um weitere Funktionen wie z.B. Wurzel, Prozentrechnung etc. ergänzen.
Da ich Anfänger bin, werden trotz diesem guten Tutorial nicht alle Fragen beantwortet.
Zur Zeit macht mir die Wurzelberechnung Probleme. Die Wurzel berechnen ist nicht weiter schwierig sondern eher wie der Ersteller des Tutorials die Berechnungen durchführen lässt.
Der Rechenalgorithmus (Funktion public void calculate(double x) bekommt nur eine Zahl von Typ double und damit wird alles berechnet.
Nun wenn ich die Wurzel berechnen möchte und 81 + Operator Wurzel dann steht immer noch 81 im Display und nicht das erwartete Ergebnis 9.
Der komplette Code:
Hat jemand eine Idee wie ich das einbauen könnte?
Mit
ging es auch nicht.
Grüße
Holger
ich habe einen Taschenrechner nach diesem Tutorial nach programmiert.
Ich möchte den Taschenrechner um weitere Funktionen wie z.B. Wurzel, Prozentrechnung etc. ergänzen.
Da ich Anfänger bin, werden trotz diesem guten Tutorial nicht alle Fragen beantwortet.
Zur Zeit macht mir die Wurzelberechnung Probleme. Die Wurzel berechnen ist nicht weiter schwierig sondern eher wie der Ersteller des Tutorials die Berechnungen durchführen lässt.
Der Rechenalgorithmus (Funktion public void calculate(double x) bekommt nur eine Zahl von Typ double und damit wird alles berechnet.
Nun wenn ich die Wurzel berechnen möchte und 81 + Operator Wurzel dann steht immer noch 81 im Display und nicht das erwartete Ergebnis 9.
Der komplette Code:
Code:
import java.awt.*;
import javax.swing.*;
// Stellt die Schnittstelle und Klassen fuer die
// Ereignisbehandlung welche durch AWT Komponenten
// erzeugt wurden bereit
import java.awt.event.*;
/**
* Erzeugt einen kleinen Taschenrechner.
* @version 1.0 23.02.2008
* @author hamster
*
*/
public class Calculator
{
public static void main(String[] args)
{
CalculatorFrame frame = new CalculatorFrame();
// Wenn Frame geschlossen -> Programm schlie�en
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Frame sichtbar machen
frame.setVisible(true);
}
}
/**
* Erzeugt einen Rahmen(Frame oder Container genannt). Der Frame nimmt
* die Teile der Benutzeroberflaeche auf.
* @param args
*/
class CalculatorFrame extends JFrame
{
public CalculatorFrame()
{
// Name der Titelleiste
setTitle("Calculator");
CalculatorPanel panel = new CalculatorPanel();
add(panel);
// Groesse des Fensters an seine Komponenten anpassen(Tasten)
pack();
}
}
/**
* Ausgaben und und/oder Menuleisten werden durch Panels erzeugt.
* Panels selbst sind Container und Oberflaechen. Diese Panels werden
* in ein Frame eingefuegt.
*
* Das Frame selbst besteht aus mehreren darueberliegenden Layern,
* dem Root Pane, dem Layered Pane, dem Glass Pane und dem
* Content Pane.
* @author hamster
*
*/
class CalculatorPanel extends JPanel
{
private JPanel panel;
private JButton display;
private boolean start;
private double result;
private String lastCommand;
public CalculatorPanel()
{
// Layout-Manager festlegen
setLayout(new BorderLayout());
result = 0;
// Gibt das Ergebnis aus und ist das letzte Kommando der Berechnung.
// Wird erneut eine Zahl gedrueckt beginnt eine neue Berechnung.
lastCommand = "=";
// Startflag setzen
start = true;
// Display hinzufuegen
display = new JButton("0");
display.setEnabled(false);
// Display oben positionieren
add(display, BorderLayout.NORTH);
// Actionlistener insert erzeugen
ActionListener insert = new InsertAction();
// ActionListener command erzeugen
ActionListener command = new CommandAction();
panel = new JPanel();
// Angabe der Anzahl von Spalten und Zeilen im Konstruktor
panel.setLayout(new GridLayout(4, 5));
// Generierung der numerischen Taschenrechner-Tasten
addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);
addButton("√", command);
addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);
addButton("x2", command);
addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);
addButton("%", command);
addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);
addButton("xyz", command);
// Panel Komponenten im Centerblock platzieren
add(panel, BorderLayout.CENTER);
}
/**
* Taste in die mittlere Grundflaeche einfuegen.
* @param label Beschriftung der Taste
* @param listener der Ereignisempfaenger fuer die Taste
*/
private void addButton(String label, ActionListener listener)
{
JButton button = new JButton(label);
// Ereignisempfaenger fuer die Schaltflaeche
button.addActionListener(listener);
panel.add(button);
}
/**
* Diese Aktion fuegt den String der Tastenaktion an das Ende
* des Anzeigetextes an
*/
private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input = event.getActionCommand();
// Beim Start keinen Text anzeigen
// Das Start Flag anschlie�end auf false setzen
if(start)
{
display.setText("");
start = false;
}
// Text anzeigen
display.setText(display.getText() + input);
}
}
/**
* Diese Aktion fuehrt den mit der Taste verbundenen
* Befehl aus.
* @author hamster
*
*/
private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand();
// Fuege den Praefix "-" an den String an wenn
// es sich um den ersten Befehl handelt(negative Zahl
if(start)
{
if(command.equals("-"))
{
display.setText(command);
start = false;
}
else
{
lastCommand = command;
}
}
else
{
// Berechnung ausfuehren
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
/**
* Fuehrt die anstehenden Berechnungen aus.
* @param x der mit dem vorherigen Ergebnis zu berechende Wert
*/
public void calculate(double x)
{
if(lastCommand.equals("+"))
result = result + x;
else if(lastCommand.equals("-"))
result = result - x;
else if(lastCommand.equals("*"))
result = result * x;
else if(lastCommand.equals("/"))
result = result / x;
else if(lastCommand.equals("√"))
result = squirt(x);
// else if(lastCommand.equals("x2"))
// result =
else if(lastCommand.equals("="))
result = x;
display.setText("" + result);
}
public Double squirt(double y)
{
Math.sqrt(y);
return y;
}
}
Hat jemand eine Idee wie ich das einbauen könnte?
Mit
Code:
result = Math.sqrt(x);
Grüße
Holger