Урок 19. Пишем простой калькулятор
Re: Урок 19. Пишем простой калькулятор
Ну так вместо очистки задавай свой текст:
setText("свой текст");
setText("свой текст");
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 19. Пишем простой калькулятор
ахах блин спасибо всё окdoter.ua писал(а):Ну так вместо очистки задавай свой текст:
setText("свой текст");
Re: Урок 19. Пишем простой калькулятор
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/
{
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/
Re: Урок 19. Пишем простой калькулятор
http://www.fileformat.info/info/unicode ... /index.htmkavlad писал(а):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/
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 19. Пишем простой калькулятор
Во многих калькуляторах есть, например в стандартном от гугл, возможность сделать свайп из правого угла и вместо кнопок с циферками, появятся остальные функцие. Как реализовать этот переход? и что за элемент экрана при перелистывании появляется?
Или если это сложно, то как сделать так, чтобы при нажатии на клавишу, появлялись другие кнопки выше, а EDIT TEXT(СТРОКА с записанными пользователем числами и операторами)
и text view(ответ) оставались на месте
Или если это сложно, то как сделать так, чтобы при нажатии на клавишу, появлялись другие кнопки выше, а EDIT TEXT(СТРОКА с записанными пользователем числами и операторами)
и text view(ответ) оставались на месте
Re: Урок 19. Пишем простой калькулятор
Отлично придумано с кнопками в меню "Очистить" и "Выход". Но вот борода, как добрать к этому меню?
На скрине видно, что в эмуляторе (как, впрочем, и на реальном устройстве) пункта "Settings", как в первых уроках, нет.
Как решить?
На скрине видно, что в эмуляторе (как, впрочем, и на реальном устройстве) пункта "Settings", как в первых уроках, нет.
Как решить?
Re: Урок 19. Пишем простой калькулятор
Спасибо за уроки!
Решил продвинуться в написании калькулятора. Убрал, 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]
Решил продвинуться в написании калькулятора. Убрал, 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]
Re: Урок 19. Пишем простой калькулятор
Вы точно во всех местах поменяли 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]
Пробуйте
Собственно примерные изменения:
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]
Пробуйте
Re: Урок 19. Пишем простой калькулятор
открываете папку res - > папку menu ->menu_main.xml (у меня так называется). Добавляете новый item .driversti писал(а):Отлично придумано с кнопками в меню "Очистить" и "Выход". Но вот борода, как добрать к этому меню?
На скрине видно, что в эмуляторе (как, впрочем, и на реальном устройстве) пункта "Settings", как в первых уроках, нет.
Как решить?
Код: Выделить всё
<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" />
Код: Выделить всё
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);
}
-
- Сообщения: 3
- Зарегистрирован: 18 сен 2015, 10:39
Re: Урок 19. Пишем простой калькулятор
Добрый день!
Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
Re: Урок 19. Пишем простой калькулятор
Копей в сторону java, бери учебник и типы изучай
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 19. Пишем простой калькулятор
BigDecemali.lavrenov писал(а):Добрый день!
Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
-
- Сообщения: 3
- Зарегистрирован: 18 сен 2015, 10:39
Re: Урок 19. Пишем простой калькулятор
doter.ua, спасибо за инфу.doter.ua писал(а):BigDecemali.lavrenov писал(а):Добрый день!
Скорее всего не вижу чего-то очевидного, но тем не менее. При выполнении этого урока столкнулся с проблемами видимо округления: т.е. 1.5 * 1.2 = 1.8000001, 1.2 * 1.3 = 1.5600001
Хотелось бы с этим разобраться, не знаю куда копать.
З.Ы. нашел внятное объяснение сути проблемы: http://floating-point-gui.de/basic/
Re: Урок 19. Пишем простой калькулятор
У меня проблема, хочу создать калькулятор для школы, для вычета средней оценок, что у меня есть не могу сумму подсчитать в коде, гуглю гуглю а примеры разных калькуляции не нахожу.
Задача: Нажимать на оценки и получить кол-во оценок, сумму и среднею. (кому то просто а я третий день туплю )
Код: Выделить всё
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+ " есть");
}
}
Задача: Нажимать на оценки и получить кол-во оценок, сумму и среднею. (кому то просто а я третий день туплю )
Re: Урок 19. Пишем простой калькулятор
Не "=+", а "+=".
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
-
- Сообщения: 13
- Зарегистрирован: 24 янв 2014, 02:45
Re: Урок 19. Пишем простой калькулятор
Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.
Re: Урок 19. Пишем простой калькулятор
интентом в extraАндрей Валентинович писал(а):Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
-
- Сообщения: 13
- Зарегистрирован: 24 янв 2014, 02:45
Re: Урок 19. Пишем простой калькулятор
Спасибоdoter.ua писал(а): интентом в extra
Re: Урок 19. Пишем простой калькулятор
решил задачу с суммой, вывел переменную накопления суммы из метода onButtonClick и все четко.Zak_uska писал(а):У меня проблема, ...
...не могу сумму подсчитать в коде
-
- Сообщения: 13
- Зарегистрирован: 24 янв 2014, 02:45
Re: Урок 19. Пишем простой калькулятор
А как добавлять списком? Чтоб один результат не заменял другой, а результаты складывались?doter.ua писал(а):интентом в extraАндрей Валентинович писал(а):Решил расширить калькулятор. Сделать 2 кнопки Результат1 и Результат2. Нажимаешь первую кнопку, открывается первый калькулятор, жмешь вторую второй, а на главной активити выводится результат сложения/вычитания/умножения/деления результата 1 и результата2. Не могу сообразить как вытянуть эти результаты на главную.