您的位置:首页 > 其它

小学四则运算(安卓应用)

2016-04-06 18:25 239 查看
合作伙伴:孟西鑫 博客地址:http://www.cnblogs.com/wanzitou/

本次实验我们把这个四则运算制作成了一个APP,我个人添加了一些功能,当然也借鉴了一些好的算法,本次程序我写了两个页面,第一个页面是要使用者 开始的功能,然后跳转到第二个页面,第二个页面则是本次程序功能之精要,所以我在layout文件夹下建了两个布局文件,并且在src文件夹下建了两个 activity.java文件分别与之相关联。

第一个布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical"
android:gravity="center"
tools:context=".FActivity" >

<Button
android:id="@+id/button1"
android:background="@drawable/orange_btn_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/buttonname_1" />

</LinearLayout>


第一个activity文件:

package com.mxx.chuti;

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

public class FActivity extends Activity{
private Button bt1;
private Button bt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.factivity);
bt1=(Button) findViewById(R.id.button1);

//注册点击事件
bt1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//初始化intent
//第一个参数:全局变量     第二个参数:第二个页面的class文件
Intent intent=new Intent(FActivity.this, SActivity.class);
startActivity(intent);
}
});
}
}


第二个布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />

<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:editable="false"
android:id="@+id/et_showview"
android:gravity="bottom|right"
android:textSize="20sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="30dp"
android:text="TextView" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"

android:gravity="center_horizontal"
android:orientation="vertical" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:gravity="center_horizontal"
android:orientation="horizontal" >

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_7"

android:text="@string/btn_7" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_8"

android:text="@string/btn_8" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_9"

android:text="@string/btn_9" />

</LinearLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_4"

android:text="@string/btn_4" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_5"

android:text="@string/btn_5" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_6"

android:text="@string/btn_6" />

</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_1"

android:text="@string/btn_1" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_2"

android:text="@string/btn_2" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_3"

android:text="@string/btn_3" />

</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_0"

android:text="@string/btn_0" />

<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="@string/btn_point"
android:id="@+id/btn_point"

android:textSize="20sp"/>
<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dip"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:textSize="20sp"
android:id="@+id/btn_del"

android:text="DEL" />

</LinearLayout>

<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"

android:text="下一道题" />

<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"

android:text="显示正确答案" />

<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"

android:text="确认" />

</LinearLayout>
</LinearLayout>


在第二个布局文件中,我用了类似于计算器输入数字的方法进行结果的输入,按下每个数字按钮每一个数字都会在edittext控件中显示出来,并加入del 按钮,防止输入错误,本来想再加一个清除按钮,只是这样一来界面不够美观,所以忍痛丢失,edittext控件上下分别是两个textview控件用来显 示题目和提示。

第二个activity文件:

package com.mxx.chuti;

import java.math.BigDecimal;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

@SuppressWarnings("unused")
public class SActivity extends Activity implements OnClickListener{
TextView tv1;
TextView tv2;
EditText et_showview;
Button bt_next;
Button bt_rightanwser;
Button bt_ok;
Button btn_1;
Button btn_2;
Button btn_3;
Button btn_4;
Button btn_5;
Button btn_6;
Button btn_7;
Button btn_8;
Button btn_9;
Button btn_0;
Button btn_point;
Button btn_del;
public int min=1;
public int max=100;
public int num_z=0;
public int num_w=0;

public boolean flag=false;
public int num_right=0;
public int num_wrong=0;
private int top;
public float answer;
private int size=100;
private String s[]=new String[100];

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sactivity);
tv1=(TextView) findViewById(R.id.textView1);
tv2=(TextView) findViewById(R.id.textView2);
et_showview=(EditText) findViewById(R.id.et_showview);
bt_next=(Button) findViewById(R.id.button1);
bt_rightanwser=(Button) findViewById(R.id.button2);
bt_ok=(Button) findViewById(R.id.button3);
btn_0=(Button) findViewById(R.id.btn_0);
btn_1=(Button) findViewById(R.id.btn_1);
btn_2=(Button) findViewById(R.id.btn_2);
btn_3=(Button) findViewById(R.id.btn_3);
btn_4=(Button) findViewById(R.id.btn_4);
btn_5=(Button) findViewById(R.id.btn_5);
btn_6=(Button) findViewById(R.id.btn_6);
btn_7=(Button) findViewById(R.id.btn_7);
btn_8=(Button) findViewById(R.id.btn_8);
btn_9=(Button) findViewById(R.id.btn_9);
btn_point=(Button) findViewById(R.id.btn_point);
btn_del=(Button) findViewById(R.id.btn_del);
//给各个按钮配置监听器
bt_next.setOnClickListener((OnClickListener) this);
bt_rightanwser.setOnClickListener(this);
bt_ok.setOnClickListener(this);
btn_0.setOnClickListener(this);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
btn_5.setOnClickListener(this);
btn_6.setOnClickListener(this);
btn_7.setOnClickListener(this);
btn_8.setOnClickListener(this);
btn_9.setOnClickListener(this);
btn_point.setOnClickListener(this);
btn_del.setOnClickListener(this);

}
//用外部类的方法注册点击事件
@Override
public void onClick(View arg0) {

// TODO Auto-generated method stub
String str = et_showview.getEditableText().toString();
switch (arg0.getId()){
case R.id.btn_point:
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:

case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:

et_showview.setText(str + ((Button) arg0).getText());
break;
case R.id.btn_del:
if (str != null && !str.equals("")) {
et_showview.setText(str.substring(0, str.length() - 1));
}
break;
case R.id.button1:
//et_showview.setText("");
chuti();
tv2.setText(" ");
case R.id.button2:
tv2.setText("正确答案是"+answer);
case R.id.button3:

if(str.length()==0){
tv2.setText("请输入答案!");

}
else{
panduan();
}
default:
break;

}
}
//产生随机数
@SuppressWarnings("unused")

private  int suijishu(int min,int max ){
int x=(int)(min*Math.random()+max);
return x;
}
@SuppressWarnings("unused")
private  void inttochar(int num,char numtochar[]){//整型转换为char型
int i=0;
int mid_num;
char mid_ch;
do{
mid_num=num%10;
numtochar[i]=(char) (mid_num+'0');
num=num/10;
i++;
}while(num!=0);

for(int j=0;j<i/2;j++){
mid_ch=numtochar[j];
numtochar[j]=numtochar[i-1-j];
numtochar[i-1-j]=mid_ch;
}

}
@SuppressWarnings("unused")
private  int length(int num){//计算数的长度
int i=0;
do{
num=num/10;
i++;
}while(num!=0);
return i;
}
@SuppressWarnings("unused")
private  int length_char(char fenshu[]){//计算分数长度
int i=0;
do{
i++;
}while(fenshu[i]!=')');
i++;
return i;
}
@SuppressWarnings("unused")
private  int length_str(char str[]){//计算完整表达式长度
int i=0;
do{
i++;
}while(str[i]!='\0');
//i++;
return i;
}
@SuppressWarnings("unused")
private  void clear_char(char mid_cha[]){//初始化字符数组
for(int i=0;i<10;i++){
mid_cha=null;
}
}
@SuppressWarnings("unused")
private  int fen_huajian(int num_first,int num_second){//求分子分母的最大公约数
int num_yuf;
int num_yus;
int num_yumid = 1;
for(int i=2;i<=num_first;i++){
num_yuf=num_first%i;
num_yus=num_second%i;
if(num_yuf==0&&num_yus==0){
num_yumid=i;
}
}
return num_yumid;
}
private  void fen(char fe[]){//产生分数
char num1[]=new char[10];//保存分子
char num2[]=new char[10];//保存分母
int num_first;
int num_second;
int l1;
int l2;

int i;
int num_maxyue;
num_first=suijishu(min,max);
num_second=suijishu(num_first,max);

num_maxyue=fen_huajian(num_first,num_second);

num_first=num_first/num_maxyue;//分子分母化简
num_second=num_second/num_maxyue;

l1=length(num_first);
l2=length(num_second);

inttochar(num_first,num1);
inttochar(num_second,num2);

fe[0]='(';
for(i=0;i<l1;i++){
fe[i+1]=num1[i];
}
fe[l1+1]='/';
for(int j=0;j<l2;j++){
fe[l1+2+j]=num2[j];
}
fe[l1+l2+2]=')';
}
private  void chuti(){
int num_yunsuanfu;//运算符个数
int ch_intorfen;//选择整数或分数
int number;//保存整数
int len=0;//保存整个式子长度
int mid_len=0;//保存单个数长度
char yunsuanfu[]=new char[3];//保存运算符
int yunsuan;//产生随机数1-4,用以判断运算符
//计数(运算数个数)
char mid_num[]=new char[10];//保存中间产生的数
char num[]=new char[100];//保存完整式子

num_yunsuanfu=suijishu(1,3);//判断产生的运算符为几个
switch(num_yunsuanfu){
case 1://产生一个运算符的情况
int i1=0;

yunsuan=suijishu(1,4);
switch(yunsuan){
case 1:
yunsuanfu[0]='+';
break;
case 2:
yunsuanfu[0]='-';
break;
case 3:
yunsuanfu[0]='*';
break;
case 4:
yunsuanfu[0]='/';
break;
}

do{
ch_intorfen=suijishu(1,2);
switch(ch_intorfen){
case 1:
do{
number=suijishu(min,max);
}while(i1==1&&yunsuanfu[0]=='/'&&number==0);
inttochar(number,mid_num);
mid_len=length(number);
for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}

break;
case 2:
fen(mid_num);
mid_len=length_char(mid_num);
for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}
clear_char(mid_num);
break;
}
len+=mid_len;
if(i1<1){
num[len]=yunsuanfu[0];
}
i1++;
len++;
}while(i1!=2);
len=0;
break;

case 2://产生两个运算符的情况
int k2;
int i2=0;
for(k2=0;k2<2;k2++){
yunsuan=suijishu(1,4);
switch(yunsuan){
case 1:
yunsuanfu[k2]='+';
break;
case 2:
yunsuanfu[k2]='-';
break;
case 3:
yunsuanfu[k2]='*';
break;
case 4:
yunsuanfu[k2]='/';
break;
}
}
do{
ch_intorfen=suijishu(1,2);
switch(ch_intorfen){
case 1:
do{
number=suijishu(min,max);
}while(i2!=0&&yunsuanfu[i2-1]=='/'&&number==0);
inttochar(number,mid_num);
mid_len=length(number);
for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}
break;
case 2:
fen(mid_num);
mid_len=length_char(mid_num);
for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}
clear_char(mid_num);
break;
}
len+=mid_len;
if(i2<3){
num[len]=yunsuanfu[i2];
}
i2++;
len++;
}while(i2!=3);
len=0;
break;
case 3:
int k3;
int i3=0;

for(k3=0;k3<3;k3++){
yunsuan=suijishu(1,4);
switch(yunsuan){
case 1:
yunsuanfu[k3]='+';
break;
case 2:
yunsuanfu[k3]='-';
break;
case 3:
yunsuanfu[k3]='*';
break;
case 4:
yunsuanfu[k3]='/';
break;
}
}

do{
ch_intorfen=suijishu(1,2);
switch(ch_intorfen){
case 1:
do{
number=suijishu(min,max);
}while(i3!=0&&yunsuanfu[i3-1]=='/'&&number==0);
inttochar(number,mid_num);
mid_len=length(number);
for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}

break;
case 2:
fen(mid_num);
mid_len=length_char(mid_num);

for(int l=0;l<mid_len;l++){
num[l+len]=mid_num[l];
}

clear_char(mid_num);

break;
}
len+=mid_len;
if(i3<3){
num[len]=yunsuanfu[i3];

}
i3++;
len++;
}while(i3!=4);
len=0;
break;
}
kuohao(num,num_yunsuanfu);
}
private  void kuohao(char num[],int b){
int wz1=0;//记录第一个运算符的位置
int wz2=0;//记录第二个运算符的位置
int wz3=0;//记录第三个运算符的位置
int i=0;//数组下标
int kh_wz;//括号位置种类
int len_str = 0;//表达式长度
char num2[]=new char[100];
String Sstr;
if(b==1){
len_str=length_str(num);
for(i=0;i<len_str;i++){
num2[i]=num[i];
}
num2[len_str]='=';
}
else{
switch(b){
case 2:
len_str=length_str(num);
for(;;){
if(num[i]=='('){
for(;;){
if(num[i]==')'){
break;
}
i++;
}
wz1=i+1;
break;
}
else{
if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){
wz1=i;
break;
}
i++;
}
}
for(i=wz1+1;;){
if(num[i]=='('){
for(;;){
if(num[i]==')'){
break;
}
i++;
}
wz2=i+1;
break;
}
else{
if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){
wz2=i;
break;
}
i++;
}
}
kh_wz=suijishu(0,3);
switch(kh_wz){
case 1:
num2[0]='(';
for(i=0;i<wz2;i++){
num2[i+1]=num[i];
}
num2[wz2+1]=')';
for(i=wz2;i<len_str;i++){
num2[i+2]=num[i];
}
num2[len_str+2]='=';
break;
case 2:
for(i=0;i<wz1+1;i++){
num2[i]=num[i];
}
num2[wz1+1]='(';
for(i=wz1+1;i<len_str;i++){
num2[i+1]=num[i];
}
num2[len_str+1]=')';
num2[len_str+2]='=';
break;

default:
for(i=0;i<len_str;i++){
num2[i]=num[i];
}
num2[len_str]='=';
break;
}
break;

case 3:
len_str=length_str(num);
for(;;){
if(num[i]=='('){
for(;;){
if(num[i]==')'){
break;
}
i++;
}
wz1=i+1;
break;
}
else{
if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){
wz1=i;
break;
}
i++;
}
}
for(i=wz1+1;;){
if(num[i]=='('){
for(;;){
if(num[i]==')'){
break;
}
i++;
}
wz2=i+1;
break;
}
else{
if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){
wz2=i;
break;
}
i++;
}
}
for(i=wz2+1;;){
if(num[i]=='('){
for(;;){
if(num[i]==')'){
break;
}
i++;
}
wz3=i+1;
break;
}
else{
if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){
wz3=i;
break;
}
i++;
}
}
kh_wz=suijishu(0,9);
switch(kh_wz){
case 1:
num2[0]='(';
for(i=0;i<wz2;i++){
num2[i+1]=num[i];
}
num2[wz2+1]=')';
for(i=wz2;i<len_str;i++){
num2[i+2]=num[i];
}
num2[len_str+2]='=';
break;
case 2:
for(i=0;i<wz1+1;i++){
num2[i]=num[i];
}
num2[wz1+1]='(';
for(i=wz1+1;i<wz3;i++){
num2[i+1]=num[i];
}
num2[wz3+1]=')';
for(i=wz3;i<len_str;i++){
num2[i+2]=num[i];
}
num2[len_str+2]='=';
break;
case 3:
for(i=0;i<wz2+1;i++){
num2[i]=num[i];
}
num2[wz2+1]='(';
for(i=wz2+1;i<len_str;i++){
num2[i+1]=num[i];
}
num2[len_str+1]=')';
num2[len_str+2]='=';
break;
case 4:
num2[0]='(';
num2[1]='(';
for(i=0;i<wz2;i++){
num2[i+2]=num[i];
}
num2[wz2+2]=')';
for(i=wz2;i<wz3;i++){
num2[i+3]=num[i];
}
num2[wz3+3]=')';
for(i=wz3;i<len_str;i++){
num2[i+4]=num[i];
}
num2[len_str+4]='=';
break;
case 5:
num2[0]='(';
for(i=0;i<wz1+1;i++){
num2[i+1]=num[i];
}
num2[wz1+2]='(';
for(i=wz1+1;i<wz3;i++){
num2[i+2]=num[i];
}
num2[wz3+2]=')';
num2[wz3+3]=')';
for(i=wz3;i<len_str;i++){
num2[i+4]=num[i];
}
num2[len_str+4]='=';
break;
case 6:
for(i=0;i<wz1+1;i++){
num2[i]=num[i];
}
num2[wz1+1]='(';
num2[wz1+2]='(';
for(i=wz1+1;i<wz3;i++){
num2[i+2]=num[i];
}
num2[wz3+2]=')';
for(i=wz3;i<len_str;i++){
num2[i+3]=num[i];
}
num2[len_str+3]=')';
num2[len_str+4]='=';
break;
case 7:
for(i=0;i<wz1+1;i++){
num2[i]=num[i];
}
num2[wz1+1]='(';
for(i=wz1+1;i<wz2+1;i++){
num2[i+1]=num[i];
}
num2[wz2+2]='(';
for(i=wz2+1;i<len_str;i++){
num2[i+2]=num[i];
}
num2[len_str+2]=')';
num2[len_str+3]=')';
num2[len_str+4]='=';
break;
case 8:
num2[0]='(';
for(i=0;i<wz2;i++){
num2[i+1]=num[i];
}
num2[wz2+1]=')';
num2[wz2+2]=num[wz2];
num2[wz2+3]='(';
for(i=wz2+1;i<len_str;i++){
num2[i+3]=num[i];
}
num2[len_str+3]=')';
num2[len_str+4]='=';
break;
default:
for(i=0;i<len_str;i++){
num2[i]=num[i];
}
num2[len_str]='=';
break;
}
break;
}

}

//System.out.println(num2);
Sstr=String.valueOf(num2);
char2str(num2,Sstr);
}
private  void char2str(char str[],String Sstr){
int l;
int k=0;
char ww;
String str1[]=new String[100];
String post[]=new String[100];
l=length_str(str);
for(int i=0;i<l;i++){
ww=str[i];
switch (ww){
case '=':
str1[k]="=";
k++;
break;
case '(':
str1[k]="(";
k++;
break;
case '+':
str1[k]="+";

k++;
break;
case '-':
str1[k]="-";
k++;
break;
case '*':
str1[k]="*";
k++;
break;
case '/':
str1[k]="/";
k++;
break;
case ')':
str1[k]=")";
k++;
break;

default:
int ss=i;
if (str[ss]=='0'){

str1[k]="0";
}
if (str[ss]=='1'){
str1[k]="1";
}
if (str[ss]=='2'){
str1[k]="2";
}
if (str[ss]=='3'){
str1[k]="3";
}
if (str[ss]=='4'){
str1[k]="4";
}
else if (str[ss]=='5'){
str1[k]="5";
}
if (str[ss]=='6'){
str1[k]="6";
}
if (str[ss]=='7'){
str1[k]="7";
}
if (str[ss]=='8'){
str1[k]="8";
}
if (str[ss]=='9'){
str1[k]="9";
}
for (ss=ss+1;;ss++){

if (str[ss]=='0'){

str1[k]+="0";
}
else if (str[ss]=='1'){
str1[k]+="1";
}
else if (str[ss]=='2'){
str1[k]+="2";
}
else if (str[ss]=='3'){
str1[k]+="3";
}
else if (str[ss]=='4'){
str1[k]+="4";
}
else if (str[ss]=='5'){
str1[k]+="5";
}
else if (str[ss]=='6'){
str1[k]+="6";
}
else if (str[ss]=='7'){
str1[k]+="7";
}
else if (str[ss]=='8'){
str1[k]+="8";
}
else if (str[ss]=='9'){
str1[k]+="9";
}
else{
i=ss-1;
break;
}
}
k++;
}
}
mid_post(str1,post,Sstr);
}
private  void clearstack(){//初始化栈顶指针
top=-1;
}
private  int emptystack(){
if (top<0){
return 1;
}
else{
return 0;
}
}
private  String gettop(){
if (emptystack()==1){
return null;
}
else{
return s[top];
}
}
private  void Push(String mid_v){
if (top>=size-1){
}
else{
top++;
s[top]=mid_v;
}
}
private  String pop(){
if (emptystack()==1){
return null;
}
else{
top--;
return s[top+1];
}
}
private  int precede(String x,String y){
int x1=0;
int y1=0;
if (x=="#")
{
x1=0;
}
if (x=="(")
{
x1=1;
}
if (x=="+")
{
x1=2;
}
if (x=="-")
{
x1=2;
}
if (x=="*")
{
x1=3;
}
if (x=="/")
{
x1=3;
}

if (y=="#")
{
y1=0;
}
if (y=="+")
{
y1=2;
}
if (y=="-")
{
y1=2;
}
if (y=="*")
{
y1=3;
}
if (y=="/")
{
y1=3;
}
if (y=="(")
{
y1=4;
}
if(x1>=y1){
return 1;
}
else{
return 0;
}
}
private  void mid_post(String str[],String post[],String Sstr){
int i=0;
int j=0;
String x;
clearstack();
Push("=");
do{
x=str[i];
i++;
if (x=="="){
while (emptystack()==0){
post[j++]=pop();
}
}
else if (x==")"){
while (gettop()!="("){
post[j++]=pop();
}
pop();
}
else if (x=="+"||x=="-"||x=="*"||x=="/"||x=="("){
while (precede(gettop(),x)==1){
post[j++]=pop();
}
Push(x);
}
else{
post[j++]=x;
}
} while (x!="=");
postcount(post,Sstr);
}
private  void postcount(String post[],String Sstr){

int i=0;
float z,a,b=0;

String x;
String xx;
clearstack();
while(post[i]!="="){
x=post[i];

if(x=="+"){
b=Float.valueOf(pop());
a=Float.valueOf(pop());
z=a+b;
xx=String.valueOf(z);
Push(xx);
}
else if(x=="-"){
b=Float.valueOf(pop());
a=Float.valueOf(pop());
z=a-b;
xx=String.valueOf(z);
Push(xx);
}
else if(x=="*"){
b=Float.valueOf(pop());
a=Float.valueOf(pop());
z=a*b;
xx=String.valueOf(z);
Push(xx);
}
else if(x=="/"){
b=Float.valueOf(pop());
a=Float.valueOf(pop());
z=a/b;
xx=String.valueOf(z);
Push(xx);
}
else{
Push(x);
}
i++;
}
if(emptystack()==0){
x=gettop();
answer=Float.parseFloat(x);
BigDecimal c=new BigDecimal((float)answer);
answer = c.setScale(2,  BigDecimal.ROUND_HALF_UP).floatValue();
}
if(answer<0){
chuti();
}
else{
num_z++;
flag=true;
tv1.setText(Sstr);

}
}
private void panduan(){
String an;
float b;
an=et_showview.getText().toString();
b=Float.parseFloat(an);

if(b==answer){
if(flag){
num_right++;
}
tv2.setText("回答正确!");

}
else
{
if(flag){
num_wrong++;
}
if(flag){
tv2.setText("回答错误!正确答案为:"+answer);

}

}
flag=false;
}
}


测试结果:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: