2016-10-26 2 views
0

Я делаю калькулятор jFrame для школьного проекта, но всякий раз, когда я пытаюсь вычислить что-то вроде 2 + 2 + 2, я получаю 4. как его единственный вычисляя последние 2 цифры. Кто-нибудь знает, как это исправить? Вот мой кодЯ хочу получить несколько расчетов, таких как 2 + 2 + 2 в моем калькуляторе jframe

//numbers 
private void NulNulActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+NulNul.getText()); 
}          

private void NulActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Nul.getText()); 
}         

private void PuntActionPerformed(java.awt.event.ActionEvent evt) {          
if(PointClick == 0){ 
Display.setText(Display.getText()+Punt.getText());  
} 
else{ 
    Punt.enable(false); 

} 
PointClick = 1; 
}          

private void EenActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Een.getText()); 
}         

private void TweeActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Twee.getText()); 
}          

private void DrieActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Drie.getText()); 
}          

private void VierActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Vier.getText()); 
}          

private void VijfActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Vijf.getText()); 
}          

private void ZesActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Zes.getText()); 
}         

private void ZevenActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Zeven.getText()); 
}          

private void AchtActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Acht.getText()); 
}          

private void NegenActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(Display.getText()+Negen.getText()); 
}          

//Clear 
private void ClearActionPerformed(java.awt.event.ActionEvent evt) {          
Display.setText(""); 
PointClick = 0; 
}          

//Back 
private void BackActionPerformed(java.awt.event.ActionEvent evt) {          
String text; 
text = Display.getText(); 
int len = text.length(); 
text = text.substring(0, len-1); 
Display.setText(text); 
}          

private void PlusActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
PlusClick= 1; 
MinusClick = MultiplyClick = DivideClick = PercentClick = PowerClick = PointClick = 0; 
}          

private void EqualsActionPerformed(java.awt.event.ActionEvent evt) {          
secondnumber = Double.parseDouble(Display.getText()); 
if(PlusClick > 0){ 
    Result = firstnumber + secondnumber; 
    Display.setText(String.valueOf(Result)); 
} 
else if(MinusClick > 0){ 
    Result = firstnumber - secondnumber; 
Display.setText(String.valueOf(Result)); 
} 
else if(MultiplyClick > 0){ 
    Result = firstnumber * secondnumber; 
Display.setText(String.valueOf(Result)); 
} 
else if(DivideClick > 0){ 
    Result = firstnumber/secondnumber; 
Display.setText(String.valueOf(Result)); 
} 
else if(PowerClick > 0){ 
    for(int i=1;i<=secondnumber;i++) 
    { 
     Result = Result * firstnumber; 
    } 
Display.setText(String.valueOf(Result));  
} 
else if(PercentClick > 0){ 
    Result = (firstnumber * secondnumber)/100; 
Display.setText(String.valueOf(Result));  
} 
}          

private void MinActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
MinusClick= 1; 
PlusClick = MultiplyClick = DivideClick = PercentClick = PowerClick = PointClick = 0; 
}         

private void KeerActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
MultiplyClick= 1; 
MinusClick = PlusClick = DivideClick = PercentClick = PowerClick = PointClick = 0; 
}          

private void DelenActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
DivideClick= 1; 
MinusClick = MultiplyClick = PlusClick = PercentClick = PowerClick = PointClick = 0; 
}          

private void WortelActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(String.valueOf(Math.sqrt(firstnumber))); 
}          

private void PIActionPerformed(java.awt.event.ActionEvent evt) {         
Display.setText(String.valueOf(Math.PI)); 
}         

private void MachtActionPerformed(java.awt.event.ActionEvent evt) {          
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
PowerClick= 1; 
MinusClick = MultiplyClick = PlusClick = PercentClick = DivideClick = PointClick = 0; 
}          

private void ProcentActionPerformed(java.awt.event.ActionEvent evt) {           
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(""); 
PercentClick= 1; 
MinusClick = MultiplyClick = PlusClick = PowerClick = DivideClick = PointClick = 0; 
}          

private void InverseActionPerformed(java.awt.event.ActionEvent evt) {           
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(String.valueOf(1/firstnumber)); 
}          

private void PlusminusActionPerformed(java.awt.event.ActionEvent evt) {           
firstnumber = Double.parseDouble(Display.getText()); 
Display.setText(String.valueOf((-1) * firstnumber)); 
}           
+0

У вас есть только 'firstnumber' и' secondnumber', поэтому он добавляет только два числа. Что именно вы пытались сделать, чтобы заставить работать более двух чисел? – walen

+1

Пожалуйста, научитесь указывать свой код, чтобы показать структуру вашей программы! – Andreas

+0

Ну, дело в том, что это мой первый день java, и мне это действительно не нравится. – Benjamin

ответ

1

Это действительно делает расчет только две последние цифры, потому что вы не хранить любой из предыдущих. Давайте сделаем ваш пример 2 + 3 + 4 для ясности. Ваши шаги:

  1. Read 2
  2. Read +, магазин 2 в firstnumber
  3. Read 3
  4. Read +, магазин 3 в firstnumber (переопределение наше предыдущее значение)
  5. Read 4
  6. Считать =, хранить 4 как secondnumber, рассчитать firstnumber + secondnumber

Что вам нужно сделать, используя ваш подход, вычислять «subresult» на шаге 4 (и при необходимости в следующих шагах) и хранить его в переменной firstnumber.

+0

Я знаю, о чем вы думаете, но у меня нет подсказки, чтобы отредактировать это в моем коде, я получил все как раз от много учебников. – Benjamin

+0

@Benjamin Вам нужно хранить две информации: (а) это первая операция? если нет - рассчитать (б), что было последней операцией? Затем проверьте его на каждом несимметричном вводе. Обратите внимание, что вы можете использовать тот же самый метод для вычисления в каждом действии (включая 'equalsAction'). Поэтому вы можете начать с того, что у вас есть в методе equalsActionPerformed. Это довольно близко к тому, как это должно выглядеть. Извлеките его на внешний метод и попытайтесь использовать на каждом шаге. – qwerty1423