以前自己写过java版的简单计算器 代码其实都一样就是改改布局
不过我现在不会获取屏幕大小。。然后按照比例设置按钮的长宽。所以先这样凑合把
都在左上角。。
/*知道怎么获取屏幕的尺寸了
int height=this.getResources().getDisplayMetrics().heightPixels;//获取屏幕的高
int width=this.getResources().getDisplayMetrics().widthPixels;//获取屏幕的宽
然后在MainActivity.java中的onCreate方法里面for循环里面添加
button[i].setWidth(width/4);
button[i].setHeight(height/6);
就能让计算器按钮铺满屏幕了~我就不修改了 */
我用的相对布局 感觉这样比较方便
layout文件
package com.example.simplecalculator;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
//private Button one,two,three,four,five,six,seven,eight,nine,ten,point,add,div,mul,sub;
private Button button[];
public EditText text;
private int id[]={R.id.one,R.id.two,R.id.three,R.id.four,R.id.five,R.id.six,R.id.seven,
R.id.eight,R.id.nine,R.id.zero,R.id.point,R.id.add,R.id.sub,R.id.mul,R.id.div,
R.id.left,R.id.right,R.id.delect,R.id.back,R.id.equal};
private EditText editText;
private Cal cal_str;
boolean equal=false;
public MainActivity() {
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button =new Button[id.length];
for(int i=0;i=1)
print.setText(new String(str,0,str.length-1));
}
else if(btn.getId()==R.id.equal){
String str=print.getText().toString();
if(str.equals("1+99")||str.equals("99+1")){
Toast.makeText(MainActivity.this, "我向你走了99步,最后一步我们一起走。", Toast.LENGTH_LONG).show();
Toast.makeText(MainActivity.this, "I LOVE YOU", Toast.LENGTH_LONG).show();
}
equal=true;
cal_str=new Cal(print,str+"=");
}
else{
if(equal){
equal=false;
print.setText(null);
}
print.setText(print.getText()+btn.getText().toString());
}
}
}
package com.example.simplecalculator;
import java.util.Stack;
import android.widget.EditText;
import android.widget.Toast;
public class Cal {
public Cal(EditText print,String str) {
// TODO Auto-generated constructor stub
char temp[]=new char[100];
Stack optr=new Stack();
Stack opnd=new Stack();
int k=0,count=0;
boolean flag=false;
optr.clear();
opnd.clear();
optr.add('=');
try{
for(int i=0;i1000)
flag=true;
char ch=str.charAt(i);
if(Character.isDigit(ch)||ch=='.'){
temp[k++]=ch;
i++;
continue;
}
if(k!=0){
opnd.add(Double.parseDouble(new String(temp,0,k)));
k=0;
}
switch(compare(optr.peek(),ch)){
case -1:flag=true;break;
case 60:optr.add(ch);i++;break;
case 61:optr.pop();i++;break;
case 62:opnd.add(result(opnd.pop(),opnd.pop(),optr.pop()));break;
}
if(flag){
break;
}
}
if(flag)
print.setText("请输入合法字符");
else
print.setText(opnd.pop().toString());
}
catch(Exception e){
print.setText("请输入合法字符");
}
}
private Double result(Double num1, Double num2, char ch) {
// TODO Auto-generated method stub
if(ch=='+')
return num2+num1;
if(ch=='-')
return num2-num1;
if(ch=='*')
return num2*num1;
if(ch=='/')
return num2/num1;
return num2;
}
private int compare(char ch1, char ch2) {
// TODO Auto-generated method stub
String oper[]={">><<<>>",">><<<>>",">>>><>>",
">>>><>>","<<<<<= ",">>>> >>","<<<<< ="};
int x,y;
x=to_num(ch1);
y=to_num(ch2);
if(x==-1||y==-1)
return -1;
return (int)(oper[x].charAt(y));
}
private int to_num(char ch) {
// TODO Auto-generated method stub
if(ch=='+')
return 0;
else if(ch=='-')
return 1;
else if(ch=='*')
return 2;
else if(ch=='/')
return 3;
else if(ch=='(')
return 4;
else if(ch==')')
return 5;
else if(ch=='=')
return 6;
else
return -1;
}
}
附上我的java简单计算器地址把点击打开链接