zoukankan      html  css  js  c++  java
  • 四则运算-安卓版

    1.Exp.java    产生运算式计算
    package com.example.cal;
    
    import android.util.Log;
    
    public class Exp {// 产生表达式及结果
    	private int item_num = 0;// 0:两项,1:三项
    	private int sign_num = 0;// 0+,1-,2*,3/
    	private int sign_num_1 = 0;// 0+,1-,2*,3/ 三项的时候需要两个运算符
    	private int kuohao = 0;// 0不产生括号,1产生括号
    	private int kuohao_weizhi = 0;// 0表示前2项有括号,1表示后2项有括号
    
    	private int result;// 结果
    
    	private StringBuilder exp=new StringBuilder();// 式子
    
    	enum Sign {
    		add, subtract, multiply, divide
    	}
    
    	Exp() {
    		while(true){
    			if(createExp()==true)
    			{
    				break;
    			}
    		}
    	}
    
    	public StringBuilder getExp() {
    		return exp;
    	}
    
    	public void setExp(StringBuilder exp) {
    		this.exp = exp;
    	}
    
    	public void setResult(int result) {
    		this.result = result;
    	}
    
    	private boolean createExp() {
    		item_num = (int) (Math.random() * 2);
    		sign_num = (int) (Math.random() * 4);
    		int a = (int) (Math.random() * 100);// 随机生成0-100以内的数
    		int b = (int) (Math.random() * 100);
    		int c = (int) (Math.random() * 100);
    		kuohao = (int) (Math.random() * 2);
    		Log.e("jhd", item_num+"");
    		Log.e("jhd", sign_num+"");
    		Log.e("jhd", kuohao+"");
    		Log.e("jhd", a+"");
    		Log.e("jhd", b+"");
    		Log.e("jhd", c+"");
    		if (item_num == 0) {// 产生2项的情况
    			String temp = "";
    			switch (sign_num) {
    			case 0:// +
    				temp = a + "+" + b;
    				result = a + b;
    				break;
    			case 1:// -
    				temp = a + "-" + b;
    				result = a - b;
    				break;
    			case 2:// *
    				temp = a + "*" + b;
    				result = a * b;
    				break;
    			case 3:// /
    				temp = a + "÷" + b;
    				if (a % b != 0) {// 不整除旧返回false
    					return false;
    
    				}
    				result = a / b;
    				break;
    			}
    			exp.append(temp);
    		}
    		if (item_num == 1) {// 式子为三项时
    
    			sign_num_1 = (int) (Math.random() * 4);// 随机产生一个运算符
    			if (kuohao == 0) {// 不产生括号
    				// 比较优先级
    				String temp;
    				if (sign_num <= 1 && sign_num_1 > 1) {// 先计算后两项
    
    					if (calculate(b, sign_num_1, c) == null) {
    						return false;
    					}
    					result = calculate(a, sign_num, calculate(b, sign_num_1, c));
    					exp.append(a + getSign(sign_num) + b + getSign(sign_num_1)
    							+ c);
    				} else {// 计算前两项
    					if (calculate(a, sign_num, b) == null) {
    						return false;
    					}
    					if (calculate(calculate(a, sign_num, b), sign_num_1, c) == null) {
    						return false;
    					}
    					result = calculate(calculate(a, sign_num, b), sign_num_1, c);
    					exp.append(a + getSign(sign_num) + b + getSign(sign_num_1)
    							+ c);
    				}
    			}
    			else{
    				return false;
    			}
    			
    
    		}
    		
    		return true;
    
    	}
    
    	public Integer calculate(int a, int sign, int b) {
    		Integer temp = null;
    		switch (sign) {
    		case 0:
    			temp = a + b;
    
    			break;
    		case 1:
    			temp = a - b;
    			break;
    		case 2:
    			temp = a * b;
    			break;
    		case 3:
    			if (a % b != 0) {// 保证能整除
    				return null;
    			}
    			temp = a / b;
    			break;
    		}
    		return temp;
    	}
    
    	private String getSign(int sign) {
    		String temp = null;
    		switch (sign) {
    		case 0:
    			temp = "+";
    
    			break;
    		case 1:
    			temp = "-";
    
    			break;
    		case 2:
    			temp = "*";
    
    			break;
    		case 4:
    			temp = "/";
    
    			break;
    		}
    		return temp;
    	}
    
    	public int getResult() {// 得到产生表达式的结果
    		return result;
    	}
    
    	/*public String getExpression() {// 得到产生的表达式
    		//if(get)
    	}*/
    
    }
    2.ExpActivity,java
    package com.example.cal;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    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;
    
    public class ExpActivity extends Activity implements OnClickListener {
    
    	private CreateExp expclass;
    	private TextView tv_exp;
    	private EditText et_result;
    	private Button next;
    	private Button exit;
    	private TextView all;
    	private TextView completed;
    	private TextView wrong;
    
    	private int index = 0;// 当前题目位置
    	private int wrong_num = 0;// 答错题目数量
    
    	private List<Exp> list;// 题目数组,所有题目
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_exp);
    		expclass = new CreateExp();// 随机产生一个2-3项四则运算式子,及式子的结果
    		// ---初始控件
    		intViews();
    
    		int num = getIntent().getIntExtra("num", 0);
    		if (num != 0) {
    			list = new ArrayList<Exp>();
    			for (int i = 0; i < num; i++) {
    				list.add(new Exp());
    			}
    			tv_exp.setText(list.get(index).getExp());//
    			all.setText("共计:"+num);
    			completed.setText("已答:"+(index));
    			wrong.setText("答错:");
    		}
    
    	}
    
    	private void intViews() {
    		// TODO Auto-generated method stub
    		tv_exp = (TextView) findViewById(R.id.tv_exp);
    		et_result = (EditText) findViewById(R.id.et_result);
    		next = (Button) findViewById(R.id.next_btn);
    		exit = (Button) findViewById(R.id.exit_btn);
    		all = (TextView) findViewById(R.id.all);
    		completed = (TextView) findViewById(R.id.completed);
    		wrong = (TextView) findViewById(R.id.wrong);
    
    		next.setOnClickListener(new OnClickListener() {// 点击下一题时,判断上一道是否正确,并且显示下一道
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				if(et_result.getText().toString()==""){
    					Toast.makeText(getApplicationContext(), "答案不能为空!",
    							Toast.LENGTH_SHORT).show();
    				}
    				int result = Integer.valueOf(et_result.getText().toString());
    				if (index >= list.size()) {
    					Toast.makeText(getApplicationContext(), "题目已经答完!",
    							Toast.LENGTH_SHORT).show();
    					return;
    				}
    				
    				if (result != list.get(index).getResult()) {
    					wrong_num++;
    					wrong.setText("答错:"+wrong_num);
    					Log.d("jhd", "已答错数目:" + wrong_num);
    				}
    				index++;
    				completed.setText("已答:"+(index));
    				if(index==list.size())
    				{
    					Toast.makeText(getApplicationContext(), "题目已经答完!",
    							Toast.LENGTH_SHORT).show();
    					return;
    				}
    				
    				tv_exp.setText(list.get(index).getExp());
    				et_result.setText("");
    			}
    		});
    
    		exit.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View arg0) {
    				// TODO Auto-generated method stub
    				finish();
    			}
    		});
    	}
    
    	@Override
    	public void onClick(View arg0) {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    3.InputAvctivity.java 
    package com.example.cal;
    
    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;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class InputActivity extends Activity implements OnClickListener{
    
    	private EditText et_num;
    	private Button btn;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_input);
    		et_num=(EditText)findViewById(R.id.et_num);
    		btn=(Button)findViewById(R.id.num_btn);
    		btn.setOnClickListener(this);
    		
    	}
    
    	@Override
    	public void onClick(View arg0) {
    		// TODO Auto-generated method stub
    		if(et_num!=null){
    			int n=Integer.valueOf(et_num.getText().toString());
    			Intent intent=new Intent(InputActivity.this,ExpActivity.class);
    			if(n==0){
    				Toast.makeText(getApplicationContext(), "请输入大于0的整数!", Toast.LENGTH_SHORT).show();
    			}
    			intent.putExtra("num", n);
    			startActivity(intent);
    		}
    	}
    
    
    }
    4.MainActivuty.java 
    package com.example.cal;
    
    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 MainActivity extends Activity implements OnClickListener {
    
    	private Button enterBtn;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		enterBtn=(Button)findViewById(R.id.enter_btn);
    		enterBtn.setOnClickListener(this);
    	}
    	@Override
    	public void onClick(View arg0) {
    		// TODO Auto-generated method stub
    		Intent intent=new Intent(MainActivity.this,InputActivity.class);
    		startActivity(intent);
    	}
    
    	
    }
    5.界面  .xml
    <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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.cal.MainActivity"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="100dp"
            android:text="欢迎进入四则运算" 
            android:textSize="30dp"
            android:gravity="center"
            />
        <Button 
            android:id="@+id/enter_btn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="进入"
            />
    
    </LinearLayout>
    
    
    <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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.cal.InputActivity" 
        android:orientation="vertical">
    	<LinearLayout 
    	    android:layout_width="fill_parent"
    		android:layout_height="50dp"	
    		android:orientation="horizontal"    
    	    >
    	    <EditText
    	        android:id="@+id/et_num"
    	        android:layout_width="0dp"
    	        android:layout_height="fill_parent"
    	        android:hint="输入算式数:"
    	        android:digits="0123456789"
    	       	android:layout_weight="3"
    	        />
    	    <Button 
    	        android:id="@+id/num_btn"
    	        android:layout_width="0dp"
    	        android:layout_height="fill_parent"
    	        android:text="确认"
    	        android:layout_weight="1"
    	        />
    	</LinearLayout>
    </LinearLayout>
    
    <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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.cal.ExpActivity" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:text="运算式:"
            android:textSize="20dp" />
    
        <TextView
            android:id="@+id/tv_exp"
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:text="111"
            android:background="@android:color/white"
            android:textSize="20dp" />
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:text="请输入运算结果:"
            android:textSize="20dp" />
    
        <EditText
            android:layout_marginTop="5dp"
            android:id="@+id/et_result"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:digits="-0123456789"
            android:textSize="20dp" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/next_btn"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="下一题" />
            <Button
                android:id="@+id/exit_btn"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="退出" />
        </LinearLayout>
        
        <LinearLayout 
            android:layout_marginTop="15dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView 
                android:id="@+id/all"
                android:gravity="center_horizontal"
                android:layout_width="0dp"
                android:text="共计:"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>
            <TextView 
                 android:id="@+id/completed"
                android:gravity="center_horizontal"
                android:text="已答:"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>
            <TextView  
                android:id="@+id/wrong"
                android:gravity="center_horizontal"
                android:text="答错:"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    
    </LinearLayout>

    介绍:

    随机产生最多三位数,随机产生运算符,用户可选择出题数目,系统随机产生算式,用户回答,系统可判断正误。

    结对的小伙伴博客:http://www.cnblogs.com/fooreveryu/

  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/wuyw/p/5375579.html
Copyright © 2011-2022 走看看