import java.lang.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class xxx {
private JFrame window;
private JPanel mainPanel,inputPanel, buttonPanel;
private JTextField jtxtNum1,jtxtNum2;
private JLabel jlblNum1Caption,jlblNum2Caption;
private JButton jbtndey;
// Scanner scanner = new Scanner(System.in);
// String s = scanner.nextLine();
private String[] tokens;/////////////////////////////////////////////////////////////////////////////////////////////////
private int pos;/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
public xxx(){
window = new JFrame("Калькулятор");
window = new JFrame("Калькулятор");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
mainPanel = new JPanel(new BorderLayout());
inputPanel = new JPanel();
buttonPanel = new JPanel();
inputPanel.setLayout(new GridLayout(1, 4));
buttonPanel.setLayout(new GridLayout(2, 4, 5, 5));
mainPanel.add(inputPanel, BorderLayout.NORTH);
mainPanel.add(buttonPanel, BorderLayout.CENTER);
addButtonsAndTextFields();
window.getContentPane().add(mainPanel);
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
}
*/
public xxx(String expr)
{
this.tokens = expr.split( "\\+|-");
this.pos = 0;
}
public double calculate(){
double first = multiply();
while(pos < tokens.length)
{
String operator = tokens[pos];
double second =multiply();
if(operator.equals("-")){
first += second;
}else{
first -= second;
}
}
return first;
}
public double multiply(){
double first = Double.parseDouble(tokens[pos++]);
while(pos < tokens.length)
{
String operator = tokens[pos];
if (!operator.equals("*") && !operator.equals("/"))
{break;}
else
{
pos++;
}
double second = Double.parseDouble(tokens[pos++]);
if(operator.equals("*")){
first *= second;
}else{
first /= second;
}
}
return first;
}
public static void main(String[] args) {
String expr = "5+5-5+5-5+5";
xxx xx = new xxx(expr);
System.out.println(xx.calculate());
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ActionListener oty = new ouyyss();
public void addButtonsAndTextFields() {
jbtndey = new JButton("deystvio");
jlblNum1Caption = new JLabel("Число 1: ", JLabel.RIGHT);
jlblNum2Caption = new JLabel("ответ: ", JLabel.RIGHT);
jtxtNum1 = new JTextField("");
jtxtNum2 = new JTextField("");
jbtndey.addActionListener(oty);
buttonPanel.add(jbtndey);
inputPanel.add(jlblNum1Caption);
inputPanel.add(jtxtNum1);
inputPanel.add(jlblNum2Caption);
inputPanel.add(jtxtNum2);
}
private class ouyyss implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == jbtndey) {
dey();
}}
}
public void dey() {
}
}
class ze{
public static void main(String[] args) {
xxx xx = new xxx();
}
}
Andry KIT
5 уровень
почему калбкулятор неправильно считает
Обсуждается
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 05:12
Вы пытаетесь разбить строку "5+5-5+6-5+6-5+6+5" по пробелам expr.split(" ");, но их тут нет
В итоге в этой String[] tokens переменной всего 1 элемент
В 0 индексе лежит "5+5-5+6-5+6-5+6+5"
double first = Double.parseDouble(tokens[pos++]); попытка спарсить приводит к ексепшену
0
Andry KIT
18 ноября 2020, 14:32
а как исправить? один чел сказал мне что можно зделать как то так
но он у меня не работает . что мне делать?
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 14:35
expr.split(regex: "\\+|-");
У вас вместо пробелов + либо -.
0
Andry KIT
18 ноября 2020, 14:38
спасибо
0
Andry KIT
18 ноября 2020, 14:43
gsd.java:104: error: ')' expected
this.tokens = expr.split(regex: "\\+|-");
у меня ошибка
я новичок и простите что задаю тупик вопроси
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 14:47
this.tokens = expr.split("\\+|-");
там не нужно писать regex
он сам добавляется как пояснение
0
Andry KIT
18 ноября 2020, 15:01
спасиб.ето помогло но появилась вторая проблема "калькулятор"виводит только первую цифру примера
0
Andry KIT
18 ноября 2020, 15:01
и да простите за граматику
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 18:22
Не понятно, что у вас за калькулятор который пытается строку сосчитать
В обычном калькуляторе 2 переменные
Сперва вводите 1 цифру, потом ставите знак и вводите другую цифру, получаете результат
0
Andry KIT
18 ноября 2020, 18:58
именно first первая цифра. second вторя цифра; first += second пример если знак равен плюсу.first -= second пример если знак не равен плюсу
0
Andry KIT
18 ноября 2020, 18:59
я хочу зделать много задачний калькулятор. потом добавлю к нему екран
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 20:27
данный код считает результат выражения в переменной str
Умеет только складывать и вычитать.
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2020, 20:29
У вас какая то каша в коде, сложно что то разобрать. Если брать 4 основные операции калькулятора все выйдет куда проще чем у вас
0
Andry KIT
18 ноября 2020, 21:22
можешь мне помочь .видишь у меня в коде есть коменти . в них входит код екрана и соответствующий обьект. я хочу зделать много строчний калькулятор с дужками и екраном
0
Andry KIT
18 ноября 2020, 21:29
и не знаю почему но компилятор говорит что не видит Pattern
error: cannot find symbol
0