Урок 19. Пишем простой калькулятор

Обсуждение уроков
Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 19. Пишем простой калькулятор

Сообщение doter.ua » 04 мар 2015, 16:59

Ну так вместо очистки задавай свой текст:
setText("свой текст");
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Eagle
Сообщения: 13
Зарегистрирован: 28 фев 2015, 12:54

Re: Урок 19. Пишем простой калькулятор

Сообщение Eagle » 04 мар 2015, 18:02

doter.ua писал(а):Ну так вместо очистки задавай свой текст:
setText("свой текст");
ахах блин спасибо всё ок

kavlad
Сообщения: 7
Зарегистрирован: 05 апр 2015, 04:41

Re: Урок 19. Пишем простой калькулятор

Сообщение kavlad » 05 апр 2015, 08:05

private Result processFunction(String func, Result r)
{
if (func.equals("sin")) {
return new Result(Math.sin(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("cos")) {
return new Result(Math.cos(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("tan")) {
return new Result(Math.tan(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("√")) { //НЕ РАБОТАЕТ
return new Result(Math.sqrt(r.acc), r.rest);
}
else if (func.equals("sqrt")) { // РАБОТАЕТ
return new Result(Math.sqrt(r.acc), r.rest);
}
else {
System.err.println("function '" + func + "' is not defined");
}

return r;
}
}
Взял метод рекурсивного спуска с этого сайта.
Вопрос:
Я ввожу в Edittext например функцию sin(90)= и выводит в ответе 1( правильно)
т.ж sqrt(a) и выводит правильный ответ, но почему-то если ввести √(a) то ответа не выходит никакого
В др методе класса есть проверка принадлежит ли элемент кодировке UNicode. И по идее разницы между sin() и √() не должно быть.

http://m.habrahabr.ru/post/122397/

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 19. Пишем простой калькулятор

Сообщение doter.ua » 05 апр 2015, 11:51

kavlad писал(а):private Result processFunction(String func, Result r)
{
if (func.equals("sin")) {
return new Result(Math.sin(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("cos")) {
return new Result(Math.cos(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("tan")) {
return new Result(Math.tan(Math.toRadians(r.acc)), r.rest);
} else if (func.equals("√")) { //НЕ РАБОТАЕТ
return new Result(Math.sqrt(r.acc), r.rest);
}
else if (func.equals("sqrt")) { // РАБОТАЕТ
return new Result(Math.sqrt(r.acc), r.rest);
}
else {
System.err.println("function '" + func + "' is not defined");
}

return r;
}
}
Взял метод рекурсивного спуска с этого сайта.
Вопрос:
Я ввожу в Edittext например функцию sin(90)= и выводит в ответе 1( правильно)
т.ж sqrt(a) и выводит правильный ответ, но почему-то если ввести √(a) то ответа не выходит никакого
В др методе класса есть проверка принадлежит ли элемент кодировке UNicode. И по идее разницы между sin() и √() не должно быть.

http://m.habrahabr.ru/post/122397/
http://www.fileformat.info/info/unicode ... /index.htm
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

kavlad
Сообщения: 7
Зарегистрирован: 05 апр 2015, 04:41

Re: Урок 19. Пишем простой калькулятор

Сообщение kavlad » 06 апр 2015, 10:29

Во многих калькуляторах есть, например в стандартном от гугл, возможность сделать свайп из правого угла и вместо кнопок с циферками, появятся остальные функцие. Как реализовать этот переход? и что за элемент экрана при перелистывании появляется?
Или если это сложно, то как сделать так, чтобы при нажатии на клавишу, появлялись другие кнопки выше, а EDIT TEXT(СТРОКА с записанными пользователем числами и операторами)
и text view(ответ) оставались на месте

driversti
Сообщения: 7
Зарегистрирован: 23 фев 2015, 13:04

Re: Урок 19. Пишем простой калькулятор

Сообщение driversti » 16 май 2015, 17:35

Отлично придумано с кнопками в меню "Очистить" и "Выход". Но вот борода, как добрать к этому меню?
На скрине видно, что в эмуляторе (как, впрочем, и на реальном устройстве) пункта "Settings", как в первых уроках, нет.
Как решить?
menuCalculator.png
menuCalculator.png (150.89 КБ) 15433 просмотра

xfn
Сообщения: 10
Зарегистрирован: 23 июл 2015, 14:54

Re: Урок 19. Пишем простой калькулятор

Сообщение xfn » 23 июл 2015, 15:08

Спасибо за уроки!
Решил продвинуться в написании калькулятора. Убрал, edit-поля, добавил кнопок с цифрами и операциями, поизучал метод ОПН (обратная польская нотация), нашел код на джаве, вставил в свою часть - работает. Однако там вычисления производятся с целочисленными. Там надо менять, если правильно понял, на double или float. Изменение кода для работы с дробными у меня не получилось (изменение на double в процедуре eval выдает ошибку в return st.get(0)) - сказывается отсутствие опыта в джаве. Помогите, пожалуйста, разобраться.

Код с integer:
[syntax=java] static boolean isDelim(char c) {
return c == ' ';
}
static boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
}
static int priority(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
case '%':
return 2;
default:
return -1;
}
}
static void processOperator(LinkedList<Integer> st, char op) {
int r = st.removeLast();
int l = st.removeLast();
switch (op) {
case '+':
st.add(l + r);
break;
case '-':
st.add(l - r);
break;
case '*':
st.add(l * r);
break;
case '/':
st.add(l / r);
break;
case '%':
st.add(l % r);
break;
}
}
public static int eval(String s) {
LinkedList<Integer> st = new LinkedList<Integer>();
LinkedList<Character> op = new LinkedList<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (isDelim(c))
continue;
if (c == '(')
op.add('(');
else if (c == ')') {
while (op.getLast() != '(')
processOperator(st,op.removeLast());
op.removeLast();
} else if (isOperator(c)) {
while (!op.isEmpty() && priority(op.getLast()) >= priority(c))
processOperator(st, op.removeLast());
op.add(c);
//Toast.makeText(getApplicationContext(),c,Toast.LENGTH_SHORT).show();;
} else {
String operand = "";
while (i < s.length() && Character.isDigit(s.charAt(i)))
operand += s.charAt(i++);
--i;
st.add(Integer.parseInt(operand));
}
}
while (!op.isEmpty())
processOperator(st, op.removeLast());
return st.get(0) ;
}

public static void main(String[] args) throws Exception {
String exp = "7+(5*2*8)";
System.out.println(eval(exp));
}
[/syntax]

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 19. Пишем простой калькулятор

Сообщение klblk » 24 июл 2015, 07:23

Вы точно во всех местах поменяли Integer на Double?
Собственно примерные изменения:
Integer => Double (везде)
int r => double r
int l => double l
int eval => double eval

Ну и самое узкое место тут:
[syntax=java5]while (i < s.length() && Character.isDigit(s.charAt(i)))
operand += s.charAt(i++);[/syntax]

Т.к. в double может встречаться еще и точка. Вероятно так:
[syntax=java5]while (i < s.length() && (Character.isDigit(s.charAt(i)) || s.charAt(i) == '.'))
operand += s.charAt(i++);[/syntax]

Пробуйте

Rocket3
Сообщения: 5
Зарегистрирован: 13 сен 2015, 20:57

Re: Урок 19. Пишем простой калькулятор

Сообщение Rocket3 » 13 сен 2015, 21:07

driversti писал(а):Отлично придумано с кнопками в меню "Очистить" и "Выход". Но вот борода, как добрать к этому меню?
На скрине видно, что в эмуляторе (как, впрочем, и на реальном устройстве) пункта "Settings", как в первых уроках, нет.
Как решить?
menuCalculator.png
открываете папку res - > папку menu ->menu_main.xml (у меня так называется). Добавляете новый item .

Код: Выделить всё

<item android:id="@+id/reset" android:title="@string/reset"
        android:orderInCategory="100" app:showAsAction="never" />
    <item android:id="@+id/quit" android:title="@string/quit"
        android:orderInCategory="100" app:showAsAction="never" />
И в mainactivity onOptionsItemSelected добавляет

Код: Выделить всё

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();


        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        if (id == R.id.reset) {
            ed1.setText("");
            ed2.setText("");
        }
        if (id == R.id.quit) {
            finish();
        }

        return super.onOptionsItemSelected(item);
    }
У меня работает . Но не знаю правильно это .

i.lavrenov
Сообщения: 3
Зарегистрирован: 18 сен 2015, 10:39

Re: Урок 19. Пишем простой калькулятор

Сообщение i.lavrenov » 18 сен 2015, 10:57

Добрый день!

Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 19. Пишем простой калькулятор

Сообщение Foenix » 18 сен 2015, 16:24

Копей в сторону java, бери учебник и типы изучай
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 19. Пишем простой калькулятор

Сообщение doter.ua » 18 сен 2015, 18:36

i.lavrenov писал(а):Добрый день!

Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
BigDecemal
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

i.lavrenov
Сообщения: 3
Зарегистрирован: 18 сен 2015, 10:39

Re: Урок 19. Пишем простой калькулятор

Сообщение i.lavrenov » 21 сен 2015, 13:15

doter.ua писал(а):
i.lavrenov писал(а):Добрый день!

Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
BigDecemal
doter.ua, спасибо за инфу.
З.Ы. нашел внятное объяснение сути проблемы: http://floating-point-gui.de/basic/

Zak_uska
Сообщения: 5
Зарегистрирован: 20 май 2015, 16:56

Re: Урок 19. Пишем простой калькулятор

Сообщение Zak_uska » 19 окт 2015, 02:31

У меня проблема, хочу создать калькулятор для школы, для вычета средней оценок, что у меня есть

Код: Выделить всё

package net.zak_uska.gridlayouts;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private int mCount = 0;

    Button mResult;
    Button mResult1;
    Button mResult2;


    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mResult = (Button) findViewById(R.id.resmedia);
        mResult1 = (Button) findViewById(R.id.et_sign);
        mResult2 = (Button) findViewById(R.id.resmedia1);



    }

    public void onButtonClick(View view) {
        //Вводим переменные, с которыми будем оперировать:
        float result1 =0;
        float result2=0;
        float result=0;
        
        switch (view.getId()) {
            case R.id.btn1:
                result1=+ ++mCount ;
                result = result1+1 ;
                result2 = result / result1;
                break;
            case R.id.btn2:
                result1=+ ++mCount ;
                result =result1+2 ;
                result2 = result / result1;
                break;
            case R.id.btn3:
                result1=+ ++mCount ;
                result = result1+3 ;
                result2 = result / result1;
                break;
            case R.id.btn4:
                result1=+ ++mCount ;
                result = result1+4 ;
                result2 = result / result1;
                break;
            default:
                break;
        }

        //настраиваем отображение результата:
        mResult.setText("Кол-во оценок "+result1+ " есть");
        //настраиваем отображение результата:
        mResult1.setText("Сумма "+result+ " нету");
        //настраиваем отображение результата:
        mResult2.setText("Средняя "+result2+ " есть");
    }
}

не могу сумму подсчитать в коде, гуглю гуглю а примеры разных калькуляции не нахожу.
Задача: Нажимать на оценки и получить кол-во оценок, сумму и среднею. (кому то просто а я третий день туплю )

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 19. Пишем простой калькулятор

Сообщение doter.ua » 19 окт 2015, 14:48

Не "=+", а "+=".
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

Re: Урок 19. Пишем простой калькулятор

Сообщение Андрей Валентинович » 27 окт 2015, 00:20

Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 19. Пишем простой калькулятор

Сообщение doter.ua » 27 окт 2015, 07:54

Андрей Валентинович писал(а):Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.
интентом в extra
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

Re: Урок 19. Пишем простой калькулятор

Сообщение Андрей Валентинович » 27 окт 2015, 15:51

doter.ua писал(а): интентом в extra
Спасибо

Zak_uska
Сообщения: 5
Зарегистрирован: 20 май 2015, 16:56

Re: Урок 19. Пишем простой калькулятор

Сообщение Zak_uska » 06 ноя 2015, 19:14

Zak_uska писал(а):У меня проблема, ...
...не могу сумму подсчитать в коде
решил задачу с суммой, вывел переменную накопления суммы из метода onButtonClick и все четко.

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

Re: Урок 19. Пишем простой калькулятор

Сообщение Андрей Валентинович » 06 ноя 2015, 19:21

doter.ua писал(а):
Андрей Валентинович писал(а):Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.
интентом в extra
А как добавлять списком? Чтоб один результат не заменял другой, а результаты складывались?

Ответить