Простой калькулятор

Ответить
Oleg34
Сообщения: 17
Зарегистрирован: 26 дек 2012, 15:41

Простой калькулятор

Сообщение Oleg34 » 26 дек 2012, 21:33

Может кто подсказать или дать ссылку на исходник простейшего калькулятора (сложение, вычитание, действие в скобках). Вообще было бы здорово если бы и с объяснением логики.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой калькулятор

Сообщение rezak90 » 26 дек 2012, 21:44

Oleg34 писал(а):Может кто подсказать или дать ссылку на исходник простейшего калькулятора (сложение, вычитание, действие в скобках). Вообще было бы здорово если бы и с объяснением логики.
не в обиду... можно не знать ЯП но логика должна присутствовать, её нельзя скопировать как код, так что если у вас проблемы с пониманием как работает калькулятор то начните с более меньшего (здесь затрудняюсь ответить что может быть проще).
R.id.team
Политика на форуме запрещена

Oleg34
Сообщения: 17
Зарегистрирован: 26 дек 2012, 15:41

Re: Простой калькулятор

Сообщение Oleg34 » 26 дек 2012, 22:26

Я не обижаюсь. Может я неправильно высказался. Я имею опыт программирования на С++ и РНР. С Java работаю первый раз. Я ищу что-то подобное как тут: http://davidmd.ru/2012/02/24/%D0%BF%D0% ... 2%D1%8C-1/
Может есть у кого исходник, или ссылка на подобный сайт?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Простой калькулятор

Сообщение rezak90 » 26 дек 2012, 23:45

так в чём проблема? с не понятием как взаимодействуют между собой "формы"? или не знания основ Java?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Простой калькулятор

Сообщение Finch » 27 дек 2012, 06:32

может проблемы с пониманием ОПН? =)
CEO of a company R.id.team

johhy
Сообщения: 8
Зарегистрирован: 29 ноя 2012, 10:46
Откуда: RU Novosibirsk

Re: Простой калькулятор

Сообщение johhy » 27 дек 2012, 09:21

Добрый день!
Написал простейший калькулятор ( всегда его пишу на для освоения темы) в java начинающий
Отрывок исходного кода
public class MyActivity extends Activity implements View.OnClickListener{
TextView showTable;
int [] list={R.id.btn_1,R.id.btn_2,R.id.btn_3,R.id.btn_4,R.id.btn_5,R.id.btn_6,R.id.btn_7,R.id.btn_8,
R.id.btn_9,R.id.btn_0,R.id.btn_dot,R.id.btn_result,R.id.btnClear,R.id.btnDelete,R.id.btnUndo,
R.id.btnExit,R.id.btn_plus,R.id.btn_minus,R.id.btn_umnozh,R.id.btn_delenie};
Intent intent;
public String buf="0",sbuf="",fbuf="",undo="";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showTable=(TextView)findViewById(R.id.showTable);
for(int x:list) findViewById(x).setOnClickListener(this);
} //Intilisize activity

@Override
public void onClick(View view) {
int keys=33;
switch (view.getId()){
case R.id.btnClear:keys=16;break;
case R.id.btnDelete:keys=17;break;
case R.id.btnUndo:keys=18;break;
case R.id.btnExit:finish();
case R.id.btn_plus:keys=11;break;
case R.id.btn_minus:keys=12;break;
case R.id.btn_umnozh:keys=13;break;
case R.id.btn_delenie:keys=14;break;
case R.id.btn_result:keys=15;break;
case R.id.btn_1:keys=1;break;
case R.id.btn_2:keys=2;break;
case R.id.btn_3:keys=3;break;
case R.id.btn_4:keys=4;break;
case R.id.btn_5:keys=5;break;
case R.id.btn_6:keys=6;break;
case R.id.btn_7:keys=7;break;
case R.id.btn_8:keys=8;break;
case R.id.btn_9:keys=9;break;
case R.id.btn_0:keys=0;break;
case R.id.btn_dot:keys=10;break;
}
findKeys(keys);
} //Catch press key

private void findKeys(int key) {
switch (key){
case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:
num(key);break;
case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:
fun(key);break;
}
} //Filter keys - Fun or Num

private void fun(int key) {
switch (key){
case 16:buf="0";showBuf();undo="";fbuf="";sbuf="";
break;//Clear key
case 17:buf=showTable.getText().toString();
if(!buf.equalsIgnoreCase("0")) {
pushInUndo(buf);
buf=removeEndChar(buf);
if(buf.equalsIgnoreCase("")) buf="0";
showBuf();
}
break;//Delete key
case 18:if(!undo.equalsIgnoreCase("")){buf=undoChar(buf);showBuf();}
break;//Undo key
case 11: arif("+");
break;//Plus key
case 12: arif("-");
break;//Minus key
case 13: arif("*");
break;//Umnozh key
case 14: arif("/");
break;//Delenie key
case 15: arif("=");
break;//Result key
}
} //Fun keys

private void arif(String s) {
if((!sbuf.equalsIgnoreCase(""))&(!fbuf.equalsIgnoreCase(""))){
Float s1=Float.valueOf(sbuf);
Float s2=Float.valueOf(showTable.getText().toString());
if(fbuf.equalsIgnoreCase("+")) {s1=s1+s2;obrez(s1);}
if(fbuf.equalsIgnoreCase("-")) {s1=s1-s2; obrez(s1);}
if(fbuf.equalsIgnoreCase("*")) {s1=s1*s2; obrez(s1);}
if(fbuf.equalsIgnoreCase("/")){
if(s2!=0) {s1=s1/s2;obrez(s1);}
else {Toast.makeText(this,"Error: Divide ziro:"+sbuf+"/0",Toast.LENGTH_LONG).show();
sbuf="";fbuf="";buf="0"; return;
}
}
fbuf="";sbuf="";showBuf();buf="0";
}else{
if(fbuf.equalsIgnoreCase("=")){
fbuf="";sbuf="";return;
}
sbuf=showTable.getText().toString();
fbuf=s;
buf="0";
}


}

private void obrez(Float s1) {
String gt;
int qq=0;
qq=(int)(s1-qq);
if((s1-qq)!=0) gt=String.valueOf(s1); else gt=String.valueOf(qq);
buf="";
int j=gt.length();
if(j>10) j=10;
for(int i=0;i<j;i++) buf+=gt.charAt(i);
if(String.valueOf(s1).length()>10) Toast.makeText(
this,"Result more than 10 digits of screen.Show only 10 first digits of result!",Toast.LENGTH_LONG).show();
}


private void pushInUndo(String asd) {
if (asd.charAt(asd.length()-1)!='.') {
undo+=String.valueOf(asd.charAt(asd.length()-1));
}
} // Push char in buffer "undo" from "buf"

private String undoChar(String asd) {
if((buf.equalsIgnoreCase("0"))&(!undo.equalsIgnoreCase(""))){
asd="";
}
asd+=undo.charAt(undo.length()-1);
undo=removeEndChar(undo);
return asd;
} //Pop char from buffer "undo" to "buf"

private String removeEndChar(String asd) {
String s="";
for(int i = 0;i<asd.length()-1;i++) s+=asd.charAt(i);
return s;
} //Method remove end char in string

private void showBuf() {
showTable.setText(buf);
} //Method show "buf"

private void num(int key) {
if(buf.length()>=10) return;
if((buf.contains("."))&(key==10)) return;
if(buf.equalsIgnoreCase("0")&(key>=0)&(key<10)) buf="";
showKey(key);

} //Num keys

private void showKey(int key) {
if(key==10) buf=buf+".";
else buf=buf+String.valueOf(key);
showBuf();
} //Method show Num key

Понимаю что какойто быдло код
Желание выделить логику кудато чтобы легко модифицировть код-добавть кнопки или функциональность итп
Вопрос
1.возможно ли константы типа R.id.btn.... разместит в enum-где тот тут читал что ненужно делать-почему?или запихать в Map-для перевода констант в читаемый вид и затем в отдельных классах с ними работать например Map<String,Integer>
2.может разделить код на классы-экран клвиатура и арифмометр которые взиамодествуют с активити

Oleg34
Сообщения: 17
Зарегистрирован: 26 дек 2012, 15:41

Re: Простой калькулятор

Сообщение Oleg34 » 27 дек 2012, 10:36

ОПН-очень интересно. Нам такое даже не давали в институте. А в остальном просто глянуть исходник и попытаться разобраться.

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Простой калькулятор

Сообщение behzodbek » 29 дек 2012, 08:06

viewtopic.php?f=50&t=1507
Вот тут мой пример
Изображение

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Простой калькулятор

Сообщение Finch » 29 дек 2012, 09:44

Oleg34, вообще-то все "правильные" калькуляторы написаны и работают по алгоритму ОПН
CEO of a company R.id.team

Oleg34
Сообщения: 17
Зарегистрирован: 26 дек 2012, 15:41

Re: Простой калькулятор

Сообщение Oleg34 » 30 дек 2012, 23:28

Спасибо!

Ответить