Permalänk

Java miniräknare med GUI

har gjort en miniräknare med ett enkelt GUI och började med att bara ha + och - som alternativ, sen ville jag ha * och delat också men blev fundersam på hur gör jag då? Då är det Calculate delen jag behöver lite hjälp att få in * samt /

den huvudsakliga tanken är alltså att jag ska kunna räkana ut tex
1+1
2-1
10/2
2*5

Var för sig och inte "3+5*7-2"

koden:

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; //Instansvariabler private Container cont; private JTextField display; //main()-metod public static void main(String[] args) { Calculator calc = new Calculator(); calc.setVisible(true); } //Konstruktor public Calculator() { initiateInstanceVariables(); buildFrame(); } //Metoder private void initiateInstanceVariables() { cont = getContentPane(); display = new JTextField(20); } private void buildFrame() { setTitle("Mini Miniräknare"); setSize(325, 100); setDefaultCloseOperation(EXIT_ON_CLOSE); cont.setLayout(new BorderLayout()); buildOpButtonPanel(); buildDispPanel(); } private void buildOpButtonPanel() { JPanel opButtonPanel = new JPanel(); JButton button; button = new JButton("C"); button.addActionListener(this); opButtonPanel.add(button); button = new JButton("+"); button.addActionListener(this); opButtonPanel.add(button); button = new JButton("/"); button.addActionListener(this); opButtonPanel.add(button); button = new JButton("*"); button.addActionListener(this); opButtonPanel.add(button); button = new JButton("-"); button.addActionListener(this); opButtonPanel.add(button); button = new JButton("="); button.addActionListener(this); opButtonPanel.add(button); cont.add(opButtonPanel, BorderLayout.SOUTH); } private void buildDispPanel() { JPanel dispPanel = new JPanel(new GridLayout(4,3)); dispPanel.add(display); cont.add(dispPanel, BorderLayout.NORTH); } public void actionPerformed(ActionEvent e) { String buttonText = e.getActionCommand(); if(buttonText.equals("=")) { calculate(); } else { if(buttonText.equals("C")) { clearDisplay(); } else { show(buttonText); } } } private void calculate() { String strExp = display.getText(); int operatorPos = strExp.indexOf("+"); if(operatorPos>-1)//addition { String firstTerm = strExp.substring(0,operatorPos); String secondTerm = strExp.substring(operatorPos+1, strExp.length()); int nr1 = Integer.parseInt(firstTerm); int nr2 = Integer.parseInt(secondTerm); int sum = nr1 + nr2; display.setText(Integer.toString(sum)); } else { operatorPos = strExp.indexOf("-"); String firstTerm = strExp.substring(0,operatorPos); String secondTerm = strExp.substring(operatorPos+1, strExp.length()); int nr1 = Integer.parseInt(firstTerm); int nr2 = Integer.parseInt(secondTerm); int sum = nr1 - nr2; display.setText(Integer.toString(sum)); } } private void clearDisplay() { display.setText(""); } private void show(String bText) { display.setText(display.getText() + bText); } }

Är medveten om att jag ska göra else if:

if (operatorPos>-1) {} else if(xxxx){} else if(xxxx){} else if(xxxx){}

Visa signatur

AMD Phenom II X4 9556- kylls av Cooler Master V8 - Windows 7 64BIT - 8 GB 1600Mhz Corsair DDR3 - Radeon HD 6800 - Cooler Master Scout - Silver Power SP-SS620M 620W PSU - Corsair SSD Force Series F60A, 60GB - Western Digital Caviar Black 1,5TB 7200RPM-

Permalänk
Medlem

Att göra en miniräknare är ett kul projekt att börja med. Det går att göra den mer och mer avancerad eftersom
Är det ett skolprojekt du håller på med eller är det efter eget initiativ?

Problemet med din kod just nu är att du förlorar stödet för negativa tal om du fortsätter på det sätt du gör. På detta vis gör du för att få stöd med flera olika operatorer. Du förlorar stöd för negativa tal.

if(strExp.indexOf("+") > -1) { //addition } else if(strExp.indexOf("-") > -1) { //subtraktion //Detta kommer bli fel då indexOf kommer att returnera 0 om uträkningen består av "-5-6" }

Någon förlust kommer det alltid att finnas om man inte gör en helhjärtad miniräknare, så att säga. Exempelvis med en "math eval"-lösning eller en egengjord evaluering som tolkar tal, operator, parentes osv steg-för-steg. Med det sagt så kan man ändå göra en "hyfsad" lösning (beroende på vart du vill landa med projektet) för att få någorlunda stöd för det du vill.

Vad du kan göra för att gå runt detta är att byta ut operatörernas kod mot en egendefinierad kod.
Vill man skriva "-5-6" så blir utfallet "-5#-#6" där "#-#" är en egen kod som man kan byta ut mot "-". Detta fall medför också förluster eftersom om användaren tillåts att skriva uttrycket helt själv så kan man inte då skilja på vad som är ett negativt tal och vad som är operator (-). I ditt fall fungerar det om det är så att användaren använder knapparna för att lägga in operator och tangenterna på tangentbordet för att skriva in tal.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?