Урок 19. Пишем простой калькулятор
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Идея такая, что при нажатии = осуществляется проверка. Если ранее нажимался +, то:
if (button_Add.isActivated()) {
result = num_a + num;
}
если -
if (button_Sub.isActivated()) {
result = num_a - num;
}
соответственно * и /
насколько я понял isActivated наподобие isEnabled, т.е. была нажата.
if (button_Add.isActivated()) {
result = num_a + num;
}
если -
if (button_Sub.isActivated()) {
result = num_a - num;
}
соответственно * и /
насколько я понял isActivated наподобие isEnabled, т.е. была нажата.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Понимаю, что путаюсь в логической последовательности действий, но не могу понять где ошибка.
И опять таки, почему if срабатывает в case R.id.btn_1, case R.id.btn_2 и во всех оcтальных, но не хочет в case R.id.btnEq ?
И опять таки, почему if срабатывает в case R.id.btn_1, case R.id.btn_2 и во всех оcтальных, но не хочет в case R.id.btnEq ?
Re: Урок 19. Пишем простой калькулятор
dil_android хотелось бы помочь, но код жутко не читабелен. Поработайте над правописанием (не русского языка) кода. Та и сама логика приложение не понятна и странная - посмотрел первые строки и я так понял у вас три поля ввода (два поля для ввода чисел и один для операторов), такое в голове не укладывается, что пользователь ещё должен вводить даже тот же оператор. В Андроиде есть стандартный калькулятор, посмотрите как он выглядит и сделайте по аналогии, если получится то добавляйте уже свои функции.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Да, извините. Выкладывал после того, как уже совсем ничего не понимал.
Создал пять полей ввода:
два для чисел etNum_1 и etNum_2
одно для операторов (+, -, *, /) et_sign
одно для оператора (=) et_equals
и одно для отображения результата etNum_3
Идея, превратить в дальнейшем этот калькулятор в детский, оперирующий только целыми числами и в пределах одного знака (для этого в <EditText> используется android:maxLength="1"). Так как в дальнейшем хочу анимировать цифры и операторы, подумал, что имея отдельные view компоненты, как например <EditText>, далее можно будет проще и легче обращаться с ними при программировании анимации.
Понимаю,что вопрос не в рамках Урока, но хотелось бы довести до конца то, над чем сидел выходные.
Заранее спасибо.
Здесь полный код:
Опять таки, наверняка путаюсь в логической последовательности действий, но не пойму где.
Создал пять полей ввода:
два для чисел etNum_1 и etNum_2
одно для операторов (+, -, *, /) et_sign
одно для оператора (=) et_equals
и одно для отображения результата etNum_3
Идея, превратить в дальнейшем этот калькулятор в детский, оперирующий только целыми числами и в пределах одного знака (для этого в <EditText> используется android:maxLength="1"). Так как в дальнейшем хочу анимировать цифры и операторы, подумал, что имея отдельные view компоненты, как например <EditText>, далее можно будет проще и легче обращаться с ними при программировании анимации.
Понимаю,что вопрос не в рамках Урока, но хотелось бы довести до конца то, над чем сидел выходные.
Заранее спасибо.
Здесь полный код:
Код: Выделить всё
public class MainActivity extends Activity {
EditText etNum_1; // объявляю поле ввода первого значения
EditText et_sign; // поле ввода знака (+,-,*,/)
EditText etNum_2; // поле ввода второго значения
EditText et_equals; //поле ввода знака равно (=)
EditText etNum_3; //поле результата
ImageButton button_Add;
ImageButton button_Sub;
int num = 0;
int num_a = 0;
int result;
String textValue = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etNum_1 = (EditText) findViewById(R.id.etNum_1);
et_sign = (EditText) findViewById(R.id.et_sign);
etNum_2 = (EditText) findViewById(R.id.etNum_2);
et_equals = (EditText) findViewById(R.id.et_equals);
etNum_3 = (EditText) findViewById(R.id.etNum_3);
button_Add = (ImageButton) findViewById(R.id.btnAdd); // кнопка сложения
button_Sub = (ImageButton) findViewById(R.id.btnDiv); // кнопка вычитания
etNum_1.setText("");
etNum_2.setText("");
etNum_3.setText("");
}
public void onButtonClick(View view) {
switch (view.getId()) {
case R.id.btnAdd:
et_sign.setText("+");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
num_a = num;
break;
case R.id.btnSub:
et_sign.setText("-");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
num_a = num;
break;
case R.id.btnMult:
et_sign.setText("*");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
break;
case R.id.btnDiv:
et_sign.setText("/");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
break;
case R.id.btnEq: // при нажатии кнопки = осуществляется проверка нажимались ли (+,-,*,/)
et_equals.setText("=");
[b]
// здесь, выставляя if { button_Add.(булен проверка если кнопку плюс нажимали)
// result = num_a + num;
// button_Sub.(булен проверка если кнопка минус нажимали)
// result = num_a - num;
//должно получаться значение result и передаваться в etNum_3.setText(Integer.toString(result));
//без if, результат передается, но только для одного действия, так как, очевидно, что если я укажу просто
// result = num_a + num;
// result = num_a - num;
// result = num_a * num;
// result = num_a / num; и буду затем передавать в etNum_3 программа будет ругаться
[/b]
etNum_3.isFocusable();
etNum_3.requestFocus();
etNum_3.setText("");
etNum_3.setText(Integer.toString(result));
etNum_3.clearFocus();
break;
case R.id.btn_1:
textValue = "";
if (etNum_1.isFocused()) {
etNum_1.setText(textValue + "1");
textValue = etNum_1.getText().toString();
num = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "1");
textValue = etNum_2.getText().toString();
num = Integer.parseInt(textValue);
}
break;
case R.id.btn_2:
textValue = "";
if (etNum_1.isFocused()) {
etNum_1.setText(textValue + "2");
textValue = etNum_1.getText().toString();
num = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "2");
textValue = etNum_2.getText().toString();
num = Integer.parseInt(textValue);
}
break;
case R.id.btn_3:
break;
case R.id.btn_4:
break;
case R.id.btn_5:
break;
case R.id.btn_6:
break;
case R.id.btn_7:
break;
case R.id.btn_8:
break;
case R.id.btn_9:
break;
case R.id.btn_0:
break;
}
}
}
Re: Урок 19. Пишем простой калькулятор
1) про красоту кода я уже говорил, повторятся не буду;
2) повторения кода на каждой кнопке, не ужели нельзя вынести вот этот блок:
у вас один и тот же код повторяется 4 раза
3) в чём смысл этих строк:
они делают проверку и возвращают иситну или ложь, what for?
4) я так и не понял зачем использовать поля ввода, если можно минимизировать всё повесив кнопки, при этом количество кода уменьшится и вероятность ввода человеком нежелательных значений отпадает;
5) не вижу не одной проверки на введённые данные. Если пользователь введёт не число а "йцпупйцуйцун" ? будет фейл Что бы с этим не заморачиваться смотрите выше;
P.S. Мой вывод - это велосипед индусского производства
P.P.S Надеюсь к критике вы отнесётесь разумно.
2) повторения кода на каждой кнопке, не ужели нельзя вынести вот этот блок:
Код: Выделить всё
case R.id.btnAdd:
et_sign.setText("+");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
num_a = num;
break;
case R.id.btnSub:
et_sign.setText("-");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
num_a = num;
break;
case R.id.btnMult:
et_sign.setText("*");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
break;
case R.id.btnDiv:
et_sign.setText("/");
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
break;
3) в чём смысл этих строк:
Код: Выделить всё
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable(); // вот эта
etNum_2.requestFocus();
} else {
etNum_2.isFocused(); // и вот эта
etNum_2.clearFocus();
}
4) я так и не понял зачем использовать поля ввода, если можно минимизировать всё повесив кнопки, при этом количество кода уменьшится и вероятность ввода человеком нежелательных значений отпадает;
5) не вижу не одной проверки на введённые данные. Если пользователь введёт не число а "йцпупйцуйцун" ? будет фейл Что бы с этим не заморачиваться смотрите выше;
P.S. Мой вывод - это велосипед индусского производства
P.P.S Надеюсь к критике вы отнесётесь разумно.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Спасибо за ответ. Сам понимаю, что код написан коряво, но на то есть свои причины:
1.Как уже писал ранее, не силен в программировании, но очень хочется восстановить знания полученные когда-то, и заодно научиться делать это, по крайней мере хорошо, в Android.
2. (ссылка на пункт 1.) Прежде чем оптимизировать код, хочу убедиться в том, что логическая последовательность действий правильна и весь этот велосипед сможет ехать.
Теперь по вашим замечаниям:
5. проверки еще не писал, но о них думал (например, деление на ноль). Что писать (наверняка деление на ноль, accidental input, что еще?) буду решать после.
4. объясните пожалуйста, что означает "минимизировать все повесив кнопки". Кнопки описаны в main и вызывают метод onButtonClick(View view) строкой <android:onClick="onButtonClick">;
3.смысл строки в следующем. Как только открывается приложение, поле ввода etNum_1 автоматом находится в фокусе. После того как вводится числовое значение в etNum_1 и нажимается (+, -, *, /) происходит проверка
по результату которой фокус передается etNum_2 для ввода второго числового значения (else если etNum_2 уже в фокусе).
Когда вы нажимаете =, то фокус передается от etNum_2 к etNum_3 для отображения результата.
Вот тут меня начинает клинить, и возникает вопрос: почему не срабатывает if. может я проверочный метод не тот вызываю button_Add.isEnabled(да,кнопка плюс нажималась, первое значение num,полученное из etNum_1 передано в num_a и теперь, после того как num принял значение из etNum_2 можно осуществлять сложение и получать результат result = num_a+num).
2. и 1. как вынести блок пока не думал, но опять таки (ссылка на мои пункт 1 и 2). Если вас не затруднит, дайте пожалуйста какой нибудь clue, как можно это аккуратно сделать.
Еще раз приношу извинения за то, что обсуждаемый вопрос не совсем по уроку.
Спасибо.
1.Как уже писал ранее, не силен в программировании, но очень хочется восстановить знания полученные когда-то, и заодно научиться делать это, по крайней мере хорошо, в Android.
2. (ссылка на пункт 1.) Прежде чем оптимизировать код, хочу убедиться в том, что логическая последовательность действий правильна и весь этот велосипед сможет ехать.
Теперь по вашим замечаниям:
5. проверки еще не писал, но о них думал (например, деление на ноль). Что писать (наверняка деление на ноль, accidental input, что еще?) буду решать после.
4. объясните пожалуйста, что означает "минимизировать все повесив кнопки". Кнопки описаны в main и вызывают метод onButtonClick(View view) строкой <android:onClick="onButtonClick">;
3.смысл строки в следующем. Как только открывается приложение, поле ввода etNum_1 автоматом находится в фокусе. После того как вводится числовое значение в etNum_1 и нажимается (+, -, *, /) происходит проверка
Код: Выделить всё
if (etNum_1.isFocused()) {
etNum_1.clearFocus();
etNum_2.isFocusable();
etNum_2.requestFocus();
} else {
etNum_2.isFocused();
etNum_2.clearFocus();
}
Когда вы нажимаете =, то фокус передается от etNum_2 к etNum_3 для отображения результата.
Вот тут меня начинает клинить, и возникает вопрос: почему не срабатывает if. может я проверочный метод не тот вызываю button_Add.isEnabled(да,кнопка плюс нажималась, первое значение num,полученное из etNum_1 передано в num_a и теперь, после того как num принял значение из etNum_2 можно осуществлять сложение и получать результат result = num_a+num).
2. и 1. как вынести блок пока не думал, но опять таки (ссылка на мои пункт 1 и 2). Если вас не затруднит, дайте пожалуйста какой нибудь clue, как можно это аккуратно сделать.
Еще раз приношу извинения за то, что обсуждаемый вопрос не совсем по уроку.
Спасибо.
Re: Урок 19. Пишем простой калькулятор
потому что по нажатию на кнопку фокус передаётся ей и по этому isFocused() будет возвращать falseВот тут меня начинает клинить, и возникает вопрос: почему не срабатывает if
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
т.е., вопрос в согласованности времен?
нажав кнопку = я не могу спросить нажималась ли до этого кнопка + ???
нажав кнопку = я не могу спросить нажималась ли до этого кнопка + ???
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
что в этом случае делать?
как проверить была ли нажата btn_Add?
как проверить была ли нажата btn_Add?
Re: Урок 19. Пишем простой калькулятор
1. Заменить везде EditText на TextView. - добавив соответствующий стиль оформления
2. Вместо isFocused(), requestFocus(), clearFocus() использовать переменную класса boolean firstOperand; и/или boolean secondOperand;
3. Для проверки что нажималаь кнопка операции - переменная класса char operation;
2. Вместо isFocused(), requestFocus(), clearFocus() использовать переменную класса boolean firstOperand; и/или boolean secondOperand;
3. Для проверки что нажималаь кнопка операции - переменная класса char operation;
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Спасибо большое math64,
После того, как вы дали направление, получилось следующее:
намного, намного красивше и мне кажется более читабельно чем было. Главное, я избавился от focus.
однако программа, при вызове, упорно пытается убедить меня, что 1+1=1, а 1+2=2, такая же ситуация с вычитанием.
Умножение и деление проходят нормально.
Подскажите, где я допускаю ошибку.
P.S.Что касается проверок, то единственные, которые нужно будет писать, это деление на ноль и отрицательное значение при вычитании. Вводить буквенные или другие значения не получится, так как в </TextView> для операндов есть android:digits="+-*/", а для числовых значений android:inputType="number"
После того, как вы дали направление, получилось следующее:
Код: Выделить всё
public class MainActivity extends Activity {
int num_1 = 0;
int num_2 = 0;
int result = 0;
boolean operand;
boolean firstTextField_isFull;
String textValue = "";
TextView etNum_1; // объявляю поле ввода первого значения
TextView et_sign; // поле ввода знака (+,-,*,/)
TextView etNum_2; // поле ввода второго значения
TextView et_equals; //поле ввода знака равно (=)
TextView etNum_3; //поле результата
ImageButton button_Add;
ImageButton button_Sub;
ImageButton button_Mult;
ImageButton button_Div;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etNum_1 = (TextView) findViewById(R.id.etNum_1);
et_sign = (TextView) findViewById(R.id.et_sign);
etNum_2 = (TextView) findViewById(R.id.etNum_2);
et_equals = (TextView) findViewById(R.id.et_equals);
etNum_3 = (TextView) findViewById(R.id.etNum_3);
button_Add = (ImageButton) findViewById(R.id.btnAdd); // кнопка сложения
button_Sub = (ImageButton) findViewById(R.id.btnSub); // кнопка вычитания
button_Mult = (ImageButton) findViewById(R.id.btnMult);
button_Div = (ImageButton) findViewById(R.id.btnDiv);
etNum_1.setText("");
etNum_2.setText("");
etNum_3.setText("");
}
public void onButtonClick(View view) {
switch (view.getId()) {
case R.id.btnAdd:
et_sign.setText("+");
firstTextField_isFull = true;
operand = true;
break;
case R.id.btnSub:
et_sign.setText("-");
firstTextField_isFull = true;
operand = false;
break;
case R.id.btnMult:
et_sign.setText("*");
firstTextField_isFull = true;
operand = true;
break;
case R.id.btnDiv:
et_sign.setText("/");
firstTextField_isFull = true;
operand = false;
break;
case R.id.btnEq:
et_equals.setText("=");
if (operand == true) {
result = num_1 + num_2;
} else {
result = num_1 - num_2;
}
if (operand == true) {
result = num_1 * num_2;
} else {
result = num_1 / num_2;
}
etNum_3.setText(Integer.toString(result));
firstTextField_isFull = false;
break;
case R.id.btn_1:
textValue = "";
if (firstTextField_isFull == false) {
etNum_1.setText(textValue + "1");
textValue = etNum_1.getText().toString();
num_1 = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "1");
textValue = etNum_2.getText().toString();
num_2 = Integer.parseInt(textValue);
}
break;
case R.id.btn_2:
textValue = "";
if (firstTextField_isFull == false) {
etNum_1.setText(textValue + "2");
textValue = etNum_1.getText().toString();
num_1 = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "2");
textValue = etNum_2.getText().toString();
num_2 = Integer.parseInt(textValue);
}
break;
case R.id.btn_3:
textValue = "";
if (firstTextField_isFull == false) {
etNum_1.setText(textValue + "3");
textValue = etNum_1.getText().toString();
num_1 = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "3");
textValue = etNum_2.getText().toString();
num_2 = Integer.parseInt(textValue);
}
break;
case R.id.btn_4:
textValue = "";
if (firstTextField_isFull == false) {
etNum_1.setText(textValue + "4");
textValue = etNum_1.getText().toString();
num_1 = Integer.parseInt(textValue);
} else {
etNum_2.setText(textValue + "4");
textValue = etNum_2.getText().toString();
num_2 = Integer.parseInt(textValue);
}
break;
}
}
}
однако программа, при вызове, упорно пытается убедить меня, что 1+1=1, а 1+2=2, такая же ситуация с вычитанием.
Умножение и деление проходят нормально.
Подскажите, где я допускаю ошибку.
P.S.Что касается проверок, то единственные, которые нужно будет писать, это деление на ноль и отрицательное значение при вычитании. Вводить буквенные или другие значения не получится, так как в </TextView> для операндов есть android:digits="+-*/", а для числовых значений android:inputType="number"
Re: Урок 19. Пишем простой калькулятор
Потому, что переменная operand должна быть типа char и принимать значения '+', '-', '*', '/' и 0 (не выбрано) (PS: в Unicode есть символы '×' и '÷' - можешь использовать их)
У тебя она типа boolean и не может отличить + от * и после сложения делает умножение, которое затирает результат сложения.
Обработчики для R.id.btn_0, R.id.btn_1 ... R.id.btn_9 можешь объединить прописав в разметке в tag для этих кнопок "0", "1" ... "9".
У тебя она типа boolean и не может отличить + от * и после сложения делает умножение, которое затирает результат сложения.
Обработчики для R.id.btn_0, R.id.btn_1 ... R.id.btn_9 можешь объединить прописав в разметке в tag для этих кнопок "0", "1" ... "9".
Re: Урок 19. Пишем простой калькулятор
а калькулятор только целые числа считает? вещественные не нужно?! и результаты в целые))) 5/2=2 хД)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 19. Пишем простой калькулятор
Как говорил один мой знакомый: "Я не тупой, а просто малознающий". Начну со слов благодарности math64 и rezak90. Особенно помогли последние комменты от math64. Без вашей помощи я не смог бы написать, по настоящему свою, первую программу в Android. Теперь по делу:
1. написал следующие проверки
и читая последний коммент от rezak90 понял, что упустил еще одну, а именно деление, при котором получается не целочисленное значение (например 9/2). Сразу вопрос: есть ли какой нибудь метод, проверяющий, если число на выходе не int a float или double например?
2. Надо будет оптимизировать код на защиту от дурака, а именно повторные нажатия кнопок операндов и т.д. Особенно актуально если из этой заготовки действительно получится хороший, детский, анимированный калькулятор.
Надо еще добавить кнопку ClearAll, чтобы очищать все поля и т.д.
Вообщем, буду доводить, одновременно с изучением Уроков.
Еще раз спасибо всем, тему "как я клепал калькулятор" позвольте считать закрытой.
1. написал следующие проверки
Код: Выделить всё
case R.id.btnEq:
et_equals.setText("=");
if (calc == '+') {
result = num_1 + num_2;
} else {
if (calc == '-') {
if (num_2 > num_1) {
Toast.makeText(this, "Мы этого еще не проходили", 1000).show();
et_sign.setText("");
et_equals.setText("");
etNum_3.setText("");
etNum_2.setText("");
etNum_1.setText("");
firstTextField_isFull = false;
return;
} else {
result = num_1 - num_2;
}
}
}
if (calc == '*') {
result = num_1 * num_2;
} else {
if (calc == '/') {
if (num_1 < num_2 || num_2 == 0) {
Toast.makeText(this, "Мы этого еще не проходили", 1000).show();
et_sign.setText("");
et_equals.setText("");
etNum_3.setText("");
etNum_2.setText("");
etNum_1.setText("");
firstTextField_isFull = false;
return;
} else {
result = num_1 / num_2;
}
}
}
etNum_3.setText(Integer.toString(result));
firstTextField_isFull = false;
break;
2. Надо будет оптимизировать код на защиту от дурака, а именно повторные нажатия кнопок операндов и т.д. Особенно актуально если из этой заготовки действительно получится хороший, детский, анимированный калькулятор.
Надо еще добавить кнопку ClearAll, чтобы очищать все поля и т.д.
Вообщем, буду доводить, одновременно с изучением Уроков.
Еще раз спасибо всем, тему "как я клепал калькулятор" позвольте считать закрытой.
Re: Урок 19. Пишем простой калькулятор
Проверок как таковых нету. Можно првоерять на остаток, если остаток не равен нулю то результат вещественный. Но это велосипед.
Я когда писал свой первый калькулятор то реализовывал всё через класс Math - специальный класс для математических вычислений в Java. Он может всё =) И у него погрешность очень маленькая или вообще нету. Я где то читал что оракл рекомендуют использовать его для финансовых вычислений, потому как у него точность составляет 100000 знаков после запятой.
Я когда писал свой первый калькулятор то реализовывал всё через класс Math - специальный класс для математических вычислений в Java. Он может всё =) И у него погрешность очень маленькая или вообще нету. Я где то читал что оракл рекомендуют использовать его для финансовых вычислений, потому как у него точность составляет 100000 знаков после запятой.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 19. Пишем простой калькулятор
Здравствуйте! Недавно понадобилось написать программу для подсчета определителя, дабы облегчить себе жизнь на уроках! Сказано - сделано! Вот приложение, но с одним маленьким косяком, о котором после кода:
Так вот: если не заполнить поля и нажать на кнопку подсчета, то программа крашится, т.к. в ней нет значений! Я хочу сделать эту кнопку неактивной, т.е., но как прикрутить к этому
В правильном ли я направлении думаю и не слишком громоздко ли получится?
Код: Выделить всё
package com.example.determinant;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Determinant extends Activity implements OnClickListener {
EditText x1_s, x2_s, x3_s;
EditText y1_s, y2_s, y3_s;
EditText z1_s, z2_s, z3_s;
int x1, x2, x3;
int y1, y2, y3;
int z1, z2, z3;
int otvet;
String otvet_s;
Button btnResult;
Button clear;
TextView otvet_text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
x1_s = (EditText) findViewById(R.id.x1);
x2_s = (EditText) findViewById(R.id.x2);
x3_s = (EditText) findViewById(R.id.x3);
y1_s = (EditText) findViewById(R.id.y1);
y2_s = (EditText) findViewById(R.id.y2);
y3_s = (EditText) findViewById(R.id.y3);
z1_s = (EditText) findViewById(R.id.z1);
z2_s = (EditText) findViewById(R.id.z2);
z3_s = (EditText) findViewById(R.id.z3);
btnResult = (Button) findViewById(R.id.btnResult);
clear = (Button) findViewById(R.id.clear);
otvet_text = (TextView) findViewById(R.id.otvet);
clear.setOnClickListener(this);
btnResult.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId())
{
case R.id.clear:
x1_s.setText("");
x2_s.setText("");
x3_s.setText("");
y1_s.setText("");
y2_s.setText("");
y3_s.setText("");
z1_s.setText("");
z2_s.setText("");
z3_s.setText("");
otvet_text.setText("");
break;
case R.id.btnResult:
x1 = Integer.parseInt(x1_s.getText().toString());
x2 = Integer.parseInt(x2_s.getText().toString());
x3 = Integer.parseInt(x3_s.getText().toString());
y1 = Integer.parseInt(y1_s.getText().toString());
y2 = Integer.parseInt(y2_s.getText().toString());
y3 = Integer.parseInt(y3_s.getText().toString());
z1 = Integer.parseInt(z1_s.getText().toString());
z2 = Integer.parseInt(z2_s.getText().toString());
z3 = Integer.parseInt(z3_s.getText().toString());
otvet = x1*y2*z3 + x2*y3*z1 + x3*z2*y1 - x3*y2*z1 - x2*y1*z3 - x1*z2*y3;
otvet_s = Integer.toString(otvet);
otvet_text.setText(otvet_s);
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/x1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:ems="10"
android:hint="x1"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/y1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/x1"
android:layout_alignBottom="@+id/x1"
android:layout_centerHorizontal="true"
android:ems="10"
android:hint="y1"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/z1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/y1"
android:layout_alignBottom="@+id/y1"
android:layout_alignParentRight="true"
android:layout_marginRight="14dp"
android:ems="10"
android:hint="z1"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/x2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/x1"
android:layout_alignRight="@+id/x1"
android:layout_below="@+id/x1"
android:layout_marginTop="31dp"
android:ems="10"
android:hint="x2"
android:inputType="numberSigned"
android:maxLength="6" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/y2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/x2"
android:layout_alignBottom="@+id/x2"
android:layout_alignLeft="@+id/y1"
android:layout_alignRight="@+id/y1"
android:ems="10"
android:hint="y2"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/z2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/y2"
android:layout_alignBottom="@+id/y2"
android:layout_alignLeft="@+id/z1"
android:layout_alignRight="@+id/z1"
android:ems="10"
android:hint="z2"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/x3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/x2"
android:layout_alignRight="@+id/x2"
android:layout_below="@+id/x2"
android:layout_marginTop="34dp"
android:ems="10"
android:hint="x3"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/y3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/x3"
android:layout_alignBottom="@+id/x3"
android:layout_alignLeft="@+id/y2"
android:layout_alignRight="@+id/y2"
android:ems="10"
android:hint="y3"
android:inputType="numberSigned"
android:maxLength="6" />
<EditText
android:id="@+id/z3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/y3"
android:layout_alignBottom="@+id/y3"
android:layout_alignLeft="@+id/z2"
android:layout_alignRight="@+id/z2"
android:ems="10"
android:hint="z3"
android:inputType="numberSigned"
android:maxLength="6" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="51dp"
android:layout_marginLeft="16dp"
android:text="Определитель: "
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/otvet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView1"
android:layout_alignRight="@+id/z3"
android:layout_alignTop="@+id/textView1"
android:layout_toRightOf="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/btnResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/x3"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="38dp"
android:text="СЧИТАЙ ОПРЕДЕЛИТЕЛЬ!" />
<Button
android:id="@+id/clear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btnResult"
android:layout_alignRight="@+id/btnResult"
android:layout_below="@+id/btnResult"
android:text="ОЧИСТЬ ВСЕ!" />
</RelativeLayout>
</LinearLayout>
Так вот: если не заполнить поля и нажать на кнопку подсчета, то программа крашится, т.к. в ней нет значений! Я хочу сделать эту кнопку неактивной, т.е.
Код: Выделить всё
btnResult.setEnable(false);
Код: Выделить всё
if (TextUtils.isEmpty(etNum1.getText().toString())
|| TextUtils.isEmpty(etNum2.getText().toString())) {
return;
}
Re: Урок 19. Пишем простой калькулятор
Немного другой, но самый простой вариант - обернуть все операции, которые выполняются по нажатию кнопки R.id.btnResult, в try catch и ловить в нем java.lang.NumberFormatException. Если поймали, то выводить сообщение, что данные введены неверно. Прога рушиться не будет.Sevak писал(а):Я хочу сделать эту кнопку неактивной
А если нужна именно неактивная кнопка, то создавайте TextWatcher один на всех, и в нем в методе onTextChanged прогоняйте все нужные EditText и проверяйте на непустоту. Для удобства все EditText можно запихать в массив и работать уже с ним.
Re: Урок 19. Пишем простой калькулятор
спасибо большое, воспользовался первым способом, теперь все работает) только там был NumberFormatExceptiondamager82 писал(а):Немного другой, но самый простой вариант - обернуть все операции, которые выполняются по нажатию кнопки R.id.btnResult, в try catch и ловить в нем java.lang.NumberFormatException. Если поймали, то выводить сообщение, что данные введены неверно. Прога рушиться не будет.Sevak писал(а):Я хочу сделать эту кнопку неактивной
А если нужна именно неактивная кнопка, то создавайте TextWatcher один на всех, и в нем в методе onTextChanged прогоняйте все нужные EditText и проверяйте на непустоту. Для удобства все EditText можно запихать в массив и работать уже с ним.
Re: Урок 19. Пишем простой калькулятор
Эмулятор останавливает приложение после нажатия на равно, в чем ошибка?
package com.windows.seven.calculator;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.text.method.DigitsKeyListener;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
EditText edText;
TextView btnAdd;
TextView btnSub;
TextView btnMult;
TextView btnDiv;
TextView btnRez;
TextView btnCom;
TextView btnClear;
TextView btn0;
TextView btn1;
TextView btn2;
TextView btn3;
TextView btn4;
TextView btn5;
TextView btn6;
TextView btn7;
TextView btn8;
TextView btn9;
//Результат который заносится в масив для обработки
ArrayList<Float> result = new ArrayList<Float>();
//Первое введенное число
float num1;
//Второе введенное число
float num2;
int currentOperation = 0;
int nextOperation;
//Прибавление
final static int ADD = 1;
//Вычитание
final static int SUB = 2;
//Умножение
final static int MULT = 3;
//Деление
final static int DIV = 4;
//Равно
final static int REZ = 5;
final static int CLEAR = 1;
final static int DONT_CLEAR = 0;
int clearCalcDisplay = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//находим элементы
edText = (EditText) findViewById(R.id.edText);
btnRez = (TextView) findViewById(R.id.btnRez);
btnAdd = (TextView) findViewById(R.id.btnAdd);
btnSub = (TextView) findViewById(R.id.btnSub);
btnMult = (TextView) findViewById(R.id.btnMult);
btnDiv = (TextView) findViewById(R.id.btnDiv);
btnCom = (TextView) findViewById(R.id.btnCom);
btnClear = (TextView) findViewById(R.id.btnClear);
btn0=(TextView) findViewById(R.id.btn0);
btn1=(TextView) findViewById(R.id.btn1);
btn2=(TextView) findViewById(R.id.btn2);
btn3=(TextView) findViewById(R.id.btn3);
btn4=(TextView) findViewById(R.id.btn4);
btn5=(TextView) findViewById(R.id.btn5);
btn6=(TextView) findViewById(R.id.btn6);
btn7=(TextView) findViewById(R.id.btn7);
btn8=(TextView) findViewById(R.id.btn8);
btn9=(TextView) findViewById(R.id.btn9);
edText.setKeyListener(DigitsKeyListener.getInstance(true,true));
registerListeners();
}
//Обработка нажатия на экран
public void registerListeners () {
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("9");
}
});
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(ADD);
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(SUB);
}
});
btnMult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(MULT);
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(DIV);
}
});
btnRez.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(REZ);
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edText.setText("");
num1 = 0;
num2 = 0;
result.removeAll(result);
currentOperation = 0;
nextOperation = 0;
}
});
}
//функция расчета введенных значений
private void calcLogic(int operator) {
result.add(Float.parseFloat(edText.getText().toString()));
if (operator !=REZ) {
nextOperation = operator;
} else if (operator == REZ) {
nextOperation = 0;
}
switch (currentOperation) {
//Прибавление
case ADD:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 + num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case SUB:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 - num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case MULT:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 * num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case DIV:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 / num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
}
clearCalcDisplay = CLEAR;
currentOperation = nextOperation;
if (operator == REZ) {
num1 = 0;
num2 = 0;
result.removeAll(result);
}
}
}
package com.windows.seven.calculator;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.text.method.DigitsKeyListener;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
EditText edText;
TextView btnAdd;
TextView btnSub;
TextView btnMult;
TextView btnDiv;
TextView btnRez;
TextView btnCom;
TextView btnClear;
TextView btn0;
TextView btn1;
TextView btn2;
TextView btn3;
TextView btn4;
TextView btn5;
TextView btn6;
TextView btn7;
TextView btn8;
TextView btn9;
//Результат который заносится в масив для обработки
ArrayList<Float> result = new ArrayList<Float>();
//Первое введенное число
float num1;
//Второе введенное число
float num2;
int currentOperation = 0;
int nextOperation;
//Прибавление
final static int ADD = 1;
//Вычитание
final static int SUB = 2;
//Умножение
final static int MULT = 3;
//Деление
final static int DIV = 4;
//Равно
final static int REZ = 5;
final static int CLEAR = 1;
final static int DONT_CLEAR = 0;
int clearCalcDisplay = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//находим элементы
edText = (EditText) findViewById(R.id.edText);
btnRez = (TextView) findViewById(R.id.btnRez);
btnAdd = (TextView) findViewById(R.id.btnAdd);
btnSub = (TextView) findViewById(R.id.btnSub);
btnMult = (TextView) findViewById(R.id.btnMult);
btnDiv = (TextView) findViewById(R.id.btnDiv);
btnCom = (TextView) findViewById(R.id.btnCom);
btnClear = (TextView) findViewById(R.id.btnClear);
btn0=(TextView) findViewById(R.id.btn0);
btn1=(TextView) findViewById(R.id.btn1);
btn2=(TextView) findViewById(R.id.btn2);
btn3=(TextView) findViewById(R.id.btn3);
btn4=(TextView) findViewById(R.id.btn4);
btn5=(TextView) findViewById(R.id.btn5);
btn6=(TextView) findViewById(R.id.btn6);
btn7=(TextView) findViewById(R.id.btn7);
btn8=(TextView) findViewById(R.id.btn8);
btn9=(TextView) findViewById(R.id.btn9);
edText.setKeyListener(DigitsKeyListener.getInstance(true,true));
registerListeners();
}
//Обработка нажатия на экран
public void registerListeners () {
btn0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("0");
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("1");
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("2");
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("3");
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("4");
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("5");
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("6");
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("7");
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("8");
}
});
btn9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clearCalcDisplay == CLEAR) {
edText.setText("");
}
clearCalcDisplay = DONT_CLEAR;
edText.append("9");
}
});
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(ADD);
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(SUB);
}
});
btnMult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(MULT);
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(DIV);
}
});
btnRez.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calcLogic(REZ);
}
});
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edText.setText("");
num1 = 0;
num2 = 0;
result.removeAll(result);
currentOperation = 0;
nextOperation = 0;
}
});
}
//функция расчета введенных значений
private void calcLogic(int operator) {
result.add(Float.parseFloat(edText.getText().toString()));
if (operator !=REZ) {
nextOperation = operator;
} else if (operator == REZ) {
nextOperation = 0;
}
switch (currentOperation) {
//Прибавление
case ADD:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 + num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case SUB:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 - num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case MULT:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 * num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
case DIV:
num1 = result.get(0);
num2 = result.get(1);
result.removeAll(result);
result.add(num1 / num2);
edText.setText(String.format("%.Of", result.get(0)));
break;
}
clearCalcDisplay = CLEAR;
currentOperation = nextOperation;
if (operator == REZ) {
num1 = 0;
num2 = 0;
result.removeAll(result);
}
}
}
Re: Урок 19. Пишем простой калькулятор
Если бы вы предоставили код ошибки то можно было бы сразу решить проблему. А так могу лишь предположить что происходит NullPointerException или же NumberFormatException, так как при парсинге вы не обрабатываете их.Эмулятор останавливает приложение после нажатия на равно, в чем ошибка?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена