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

    package com.example.example07;
    
    import java.text.DecimalFormat;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    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;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private int index = 0; // 当前题数
        private int NUMBER = 0;; // 题目总数
        private static final int MAXNUMBER = 100; // 最大出题数
        private static final int MAXVALUE = 100; // 每道题目的最大值
        private boolean isSubmit = false; // 是否提交
        private String[] QUESTION = new String[MAXNUMBER]; // 题目集合
        private double[] ANSWER = new double[MAXNUMBER]; // 答案集合
        private double[] USER_ANSWER = new double[MAXNUMBER]; // 用户答案集合
        private boolean[] ANSWER_CHECK = new boolean[MAXNUMBER]; // 用户答案判定
        
        //声明控件
        private EditText et_number,et_answer,et_question; //题目数输入框 答案输入框 题目显示框
        private Button btn_confirm,btn_last,btn_next,btn_submit; //确定题数 上一题 下一题 提交题目
        private TextView tv_count,tv_check,tv_judge;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            // 获取控件
            et_question = (EditText)findViewById(R.id.et_question); // 题目显示
            et_number = (EditText)findViewById(R.id.et_number); // 题数
            et_answer = (EditText)findViewById(R.id.et_answer); // 答案
            btn_confirm = (Button)findViewById(R.id.btn_confirm); // 确定题数
            btn_last = (Button)findViewById(R.id.btn_last); // 上一题
            btn_next = (Button)findViewById(R.id.btn_next); // 下一题
            btn_submit = (Button)findViewById(R.id.btn_submit); // 提交题目
            tv_count = (TextView)findViewById(R.id.tv_count); // 显示当前题目数
            tv_check = (TextView)findViewById(R.id.tv_check); // 输出答对题数
            tv_judge = (TextView)findViewById(R.id.tv_judge); // 判定正确与否
            
            // 确定输入题数按钮
            btn_confirm.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    // 如果输入题数范围正确
                    if(inputNumber()){ 
                        et_number.setEnabled(false); // 题数不可再输入
                        btn_confirm.setEnabled(false); // Confirm按钮不可用
                        NUMBER = Integer.parseInt(et_number.getText().toString()); // 获取题目数
                        getQuestion(); // 获取题目
                        showItem(index); // 显示题目
                        
                        // 激活选题按钮
                        btn_next.setOnClickListener(new NextClick());
                        btn_last.setOnClickListener(new LastClick());
                    }
                }
            });
            
            // 提交按钮
            btn_submit.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    if (inputNumber()) {
                        if (!isSubmit) {
                            if (check()) {
                                btn_submit.setText("重置");
                                isSubmit = true;
                                et_answer.setEnabled(false);
                            }
                        } else {
                            // 重置函数
                            reset();
                            btn_submit.setText("提交");
                            isSubmit = false;
                            et_answer.setEnabled(true);
                        }
                    }
                }
            });
        }
        
        /*
         * 输入题数判断
         */
        private boolean inputNumber(){
            int temp = 0;
            try{
                temp = Integer.parseInt(et_number.getText().toString());
            }catch(Exception e){
                e.printStackTrace();
                return false;
            }
            
            if(temp >= 1 && temp <= MAXNUMBER){
                return true;
            }
            else{
                return false;
            }
        }
        
        // 输出所有100以内加减乘除的式子
        private void getQuestion(){
            DesignQuestion dq = new DesignQuestion();
            DecimalFormat df = new DecimalFormat(".00");
            for(int i = 0;i < NUMBER;i++){
                dq.reset();                                                  // 重新出题
                QUESTION[i] = dq.getString();                                // 获取题目
                ANSWER[i] = Double.parseDouble(df.format(dq.getAnswer()));    // 获取答案
            }
            
        }
        
       
        
        // 显示第i题的题目
        private void showItem(int i){
            et_question.setText(QUESTION[i]);
            index = i;
            tv_count.setText(""+(index+1)+"/"+NUMBER);
            if(USER_ANSWER[i]!=0.0){
                et_answer.setText(""+USER_ANSWER[i]);
            }
            
            // 如果提交
            if(isSubmit){
                if(ANSWER_CHECK[index] == true){
                    tv_judge.setText("");
                    Toast.makeText(getApplicationContext(), "回答正确" ,Toast.LENGTH_SHORT).show();
                }
                else{
                    tv_judge.setText("×");
                    Toast.makeText(getApplicationContext(), "正确答案为"+ANSWER[index],Toast.LENGTH_SHORT).show();
                }
            }
            
            // 获取焦点
            et_answer.requestFocus();
        }
        
        // 上一题按钮
        class LastClick implements OnClickListener{
    
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(index == 0){
                    Toast.makeText(getApplicationContext(), "这已经是第一题",Toast.LENGTH_SHORT).show();
                }
                else{
                    if(!et_answer.getText().toString().equals("")){  // 输入非空
                        try{
                            USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
                        }catch(Exception e){
                            e.printStackTrace();
                            return;
                        }
                    }
                    // 显示上一题
                    index--;
                    et_answer.setText("");
                    showItem(index);
                }
            }
            
        }
        
        // 下一题按钮
        class NextClick implements OnClickListener{
    
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(index == NUMBER-1){
                    Toast.makeText(getApplicationContext(), "这已经是最后一题",Toast.LENGTH_SHORT).show();
                }
                else{
                    // 如果输入非空
                    if(!et_answer.getText().toString().equals("")){
                        try{
                            USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
                        }catch(Exception e){
                            e.printStackTrace();
                            return;
                        }
                    }
                    
                    // 显示下一题
                    index++;
                    et_answer.setText("");
                    showItem(index);
                }
            }
            
        }
        
        // 核对答案
        private boolean check(){
            
            // 判定最后一道题目
            if(!et_answer.getText().toString().equals("")){
                try{
                    USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
                }catch(Exception e){
                    e.printStackTrace();
                    return false;
                }
            }
            
            // 核对所有题目
            int right = 0; // 答对题数
            for(int i = 0;i < NUMBER;i++){
                if(ANSWER[i] == USER_ANSWER[i]){
                    right++;
                    ANSWER_CHECK[i] = true;
                }
            }
            
            // 判定提交时正在显示的题目
            if(ANSWER_CHECK[index] == true){
                tv_judge.setText("");
                Toast.makeText(getApplicationContext(), "回答正确" ,Toast.LENGTH_SHORT).show();
            }
            else{
                tv_judge.setText("×");
                Toast.makeText(getApplicationContext(), "正确答案为"+ANSWER[index],Toast.LENGTH_SHORT).show();
            }
            
            String str = "此次答题共" + NUMBER + "道题,答对" + right + "题。";
            tv_check.setText(str);
            
            return true;
        }
        
        // 重置函数
        private void reset(){
            // 重置变量
            index = 0;
            NUMBER = 0;
            ANSWER = new double[MAXNUMBER];
            QUESTION = new String[MAXNUMBER];
            USER_ANSWER = new double[MAXNUMBER];
            ANSWER_CHECK = new boolean[MAXNUMBER];
            
            // 重置控件
            btn_confirm.setEnabled(true);
            et_number.setEnabled(true);
            tv_count.setText("0/0");
            et_answer.setText("");
            tv_check.setText("");
            tv_judge.setText("");
            et_number.setText("");
            et_question.setText("");
            
        }
        
        
    }
    package com.example.example07;
    
    /*
     * 出题类
     * 可调用的方法:
     * 1.重新出题
     * 2.获取题目
     * 3.获取答案
     */
    
    public class DesignQuestion {
    
        private int valueNum;
        private int[] values;
        private int[] symbols;
        private static int MAXVALUE = 100;
        
        
        // 构造函数
        public DesignQuestion(){
            valueNum = 3;
            toRandom();
        }
        
        public void reset(){
            toRandom();
        }
        
        // 生成随机数和符号
        private void toRandom(){
            // 数值随机
            values = new int[valueNum];
            for(int i = 0; i < values.length;i++){
                values[i] = (int)(1+Math.random()*MAXVALUE);
            }
            // 符号随机
            symbols = new int[valueNum-1];
            for(int i = 0;i < symbols.length;i++){
                symbols[i] = (int)(1+Math.random()*4);
            }
        }
        
        /* 生成答案
         * 1.如果第一个符号为加 则先计算后面
         * 2.如果第一个符号为减 
         * 第二个符号位加减 则先计算前面 否则先计算后面
         * 3.如果第一个符号为乘除 则先计算前面
         */
        public double getAnswer(){
            double temp = 0;
            switch(symbols[0]){
            case 1:{
                temp = getResult(values[1],values[2],symbols[1]);
                return getResult(values[0],(int)temp,symbols[0]);
            }
            case 2:{
                if(symbols[1] == 1 || symbols[1] == 2){  // 第二位为加减
                    temp = getResult(values[0],values[1],symbols[0]);
                    return getResult((int)temp,values[2],symbols[1]);
                }
                else{
                    temp = getResult(values[1],values[2],symbols[1]);
                    return getResult(values[0],(int)temp,symbols[0]);
                }
            }
            case 3:
            case 4:{
                temp = getResult(values[0],values[1],symbols[0]);
                return getResult((int)temp,values[2],symbols[1]);
            }
            default: return 0;
            }
        }
        
        // 根据符号返回计算结果
        private double getResult(int leftValue,int rightValue,int symbol){
            switch(symbol){
            case 1:return leftValue + rightValue;
            case 2:return leftValue - rightValue;
            case 3:return leftValue * rightValue;
            case 4:return (double)leftValue / (double)rightValue;
            default:return 0;
            }
        }
        
        // 生成题目
        public String getString(){
            String temp = "";
            for(int i = 0;i < valueNum-1;i++){
                temp = temp + values[i] + "			" + toSymbol(symbols[i]) + "			";
            }
            temp = temp + values[valueNum-1]+ "			=";
            return temp;
        }
        
        // 根据数字返回符号
        private String toSymbol(int i){
            switch(i){
            case 1:return "+";
            case 2:return "-";
            case 3:return "*";
            case 4:return "/";
            default:return null;
            }
        }
        
    }
    
    
    
    
    

    一、题目

             每个同学选一个方向,把程序扩展一下:

    1、让程序能接受用户输入答案,并判定对错。并输出正确的错题数

    2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。

    3、把程序变成一个Windows 图形界面的程序。

    4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)

    5、选一个你从来没有学过的编程语言,试一试实现基本功能。

    二、实验思路   四则运算出题应用  

    1.输入出题数 ,点击Confirm  ( 1<=n<=MAXNUMBER)  

    2.提交成功后,显示第一道题目  

    3.点击Last和Next可切换题目  

    4.点击Submit后,核对题目正确与否,并输出答对题数    

    注意:   1.答案保留一位小数   2.除法总是用较大的数除以较小的数

    三、实验截图

    四、实验日志

    项目记录 日志:

     

    听课

    编写程序

    阅读相关书籍

    网上查找资料

    日总计

    上周四

    2

    0

    0

    0

    2

    上周五

    0

    1

    1

    0

    2

    上周六

    0

    3

    0.5

    1

    4.5

    上周日

    2

    0.5

    0.5

    0

    3

    周一

    0

    3

    0.5

    1

    4.5

    周二

    0

    1

    0

    1

    2

    周三

    0

    2

    1

    0

    4

    周总计

    4

    12.5

    3.5

    3

    21

    时间记录日志

    日期

    开始 时间

    结束时间

    中断时间

    净时间

    活动

    备注

    上周四

    14:00

    16:00

    10

    100

    上课

    软件工程

    上周五

    16:00

    17:00

    0

    60

    编程

    二维数组问题

     

     

    19:00

    20:00

    0

    60

    阅读书籍

    构建之法

    上周六

    12:00

    16:00

    60

    180

    编程

     

     

    19:00

    21:00

    30

    90

    阅读书籍

    构建之法

    上周日

    14:00

    16:00

    10

    100

    上课

    软件工程

     

    19:00

    20:00

    0

    60

    编程 查找资料

    四则运算安卓版

    星期一

    13:00

    17:00

    60

    180

    编程

    数组问题

    四则运算安卓版

     

    17:00

    18:00

    0

    60

    上网

    查资料

    星期二

    12:00

    14:00

    30

    90

    编程

    数组问题

    星期三

    13:00

    15:00

    0

    180

    编程

    四则运算安卓版

    缺陷记录日志:

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复阶段

    修复缺陷

    4/1

    1

    操作数的个数

     

     

    12h

     

    在编写的程序中,从一开始的两个数的运算增加到三个数的运算

     
     

    五、实验总结:本次实验是在上几次四则运算的基础上编写出来的,我们应用移动应用开发技术将本次实验发布成安卓版本,并可以安装到手机上,我们这次的思路没有改变,知识语言由c++转变为Java语言,Java语言相对比较简单,好多函数、类都能调用,比较方便。而且在此次编写 的过程中,我们对安卓的开发更加熟悉,使我们获益不少。

      我的伙伴 张瑶:http://www.cnblogs.com/zhangyao999/

  • 相关阅读:
    xml学习篇(二) ----JSON 和XML对比
    xml学习篇(一)
    在Tomcat下部署web项目
    三枪客
    在Eclipse中使用JUnit4进行单元测试(初级篇)
    在Eclipse中使用JUnit4进行单元测试(高级篇)
    在Eclipse中使用JUnit4进行单元测试(中级篇)
    hibernate学习之Hibernate API
    Hibernate学习之对象持久化
    MySQL【七】单表查询
  • 原文地址:https://www.cnblogs.com/luxin123/p/5364395.html
Copyright © 2011-2022 走看看