一、题目
每个同学选一个方向,把程序扩展一下:
1、让程序能接受用户输入答案,并判定对错。并输出正确的错题数
2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。
3、把程序变成一个Windows 图形界面的程序。
4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)
5、选一个你从来没有学过的编程语言,试一试实现基本功能。
二、思路
四则运算出题应用 1.输入出题数 ,点击Confirm ( 1<=n<=MAXNUMBER) 2.提交成功后,显示第一道题目 3.点击Last和Next可切换题目 4.点击Submit后,核对题目正确与否,并输出答对题数 注意: 1.答案保留一位小数 2.除法总是用较大的数除以较小的数
1 package com.example.example07; 2 3 /* 4 * 四则运算出题应用 5 * 1.输入出题数 ,点击Confirm ( 1<=n<=MAXNUMBER) 6 * 2.提交成功后,显示第一道题目 7 * 3.点击Last和Next可切换题目 8 * 4.点击Submit后,核对题目正确与否,并输出答对题数 9 * 10 * 注意: 11 * 1.答案保留一位小数 12 * 2.除法总是用较大的数除以较小的数 13 */ 14 15 import java.text.DecimalFormat; 16 17 import android.os.Bundle; 18 import android.app.Activity; 19 import android.view.Menu; 20 import android.view.View; 21 import android.view.View.OnClickListener; 22 import android.widget.Button; 23 import android.widget.EditText; 24 import android.widget.TextView; 25 import android.widget.Toast; 26 27 public class MainActivity extends Activity { 28 29 private int index = 0; // 当前题数 30 private int NUMBER = 0;; // 题目总数 31 private static final int MAXNUMBER = 100; // 最大出题数 32 private static final int MAXVALUE = 100; // 每道题目的最大值 33 private boolean isSubmit = false; // 是否提交 34 private String[] QUESTION = new String[MAXNUMBER]; // 题目集合 35 private double[] ANSWER = new double[MAXNUMBER]; // 答案集合 36 private double[] USER_ANSWER = new double[MAXNUMBER]; // 用户答案集合 37 private boolean[] ANSWER_CHECK = new boolean[MAXNUMBER]; // 用户答案判定 38 39 //声明控件 40 private EditText et_number,et_answer,et_question; //题目数输入框 答案输入框 题目显示框 41 private Button btn_confirm,btn_last,btn_next,btn_submit; //确定题数 上一题 下一题 提交题目 42 private TextView tv_count,tv_check,tv_judge; 43 44 @Override 45 protected void onCreate(Bundle savedInstanceState) { 46 super.onCreate(savedInstanceState); 47 setContentView(R.layout.activity_main); 48 49 // 获取控件 50 et_question = (EditText)findViewById(R.id.et_question); // 题目显示 51 et_number = (EditText)findViewById(R.id.et_number); // 题数 52 et_answer = (EditText)findViewById(R.id.et_answer); // 答案 53 btn_confirm = (Button)findViewById(R.id.btn_confirm); // 确定题数 54 btn_last = (Button)findViewById(R.id.btn_last); // 上一题 55 btn_next = (Button)findViewById(R.id.btn_next); // 下一题 56 btn_submit = (Button)findViewById(R.id.btn_submit); // 提交题目 57 tv_count = (TextView)findViewById(R.id.tv_count); // 显示当前题目数 58 tv_check = (TextView)findViewById(R.id.tv_check); // 输出答对题数 59 tv_judge = (TextView)findViewById(R.id.tv_judge); // 判定正确与否 60 61 // 确定输入题数按钮 62 btn_confirm.setOnClickListener(new OnClickListener() { 63 64 @Override 65 public void onClick(View arg0) { 66 // 如果输入题数范围正确 67 if(inputNumber()){ 68 et_number.setEnabled(false); // 题数不可再输入 69 btn_confirm.setEnabled(false); // Confirm按钮不可用 70 NUMBER = Integer.parseInt(et_number.getText().toString()); // 获取题目数 71 getQuestion(); // 获取题目 72 showItem(index); // 显示题目 73 74 // 激活选题按钮 75 btn_next.setOnClickListener(new NextClick()); 76 btn_last.setOnClickListener(new LastClick()); 77 } 78 } 79 }); 80 81 // 提交按钮 82 btn_submit.setOnClickListener(new OnClickListener() { 83 84 @Override 85 public void onClick(View arg0) { 86 if (inputNumber()) { 87 if (!isSubmit) { 88 if (check()) { 89 btn_submit.setText("重置"); 90 isSubmit = true; 91 et_answer.setEnabled(false); 92 } 93 } else { 94 // 重置函数 95 reset(); 96 btn_submit.setText("提交"); 97 isSubmit = false; 98 et_answer.setEnabled(true); 99 } 100 } 101 } 102 }); 103 } 104 105 /* 106 * 输入题数判断 107 */ 108 private boolean inputNumber(){ 109 int temp = 0; 110 try{ 111 temp = Integer.parseInt(et_number.getText().toString()); 112 }catch(Exception e){ 113 e.printStackTrace(); 114 return false; 115 } 116 117 if(temp >= 1 && temp <= MAXNUMBER){ 118 return true; 119 } 120 else{ 121 return false; 122 } 123 } 124 125 // 输出所有100以内加减乘除的式子 126 private void getQuestion(){ 127 String equ = ""; 128 int symbol = 0,leftValue = 0,rightValue = 0; 129 DecimalFormat df = new DecimalFormat(".00"); // 保留两位小数 130 for(int i = 0;i < NUMBER;i++){ 131 equ = ""; 132 symbol = (int)(1+Math.random()*4); // 符号 1 + 2 - 3 * 4 / 133 leftValue = (int)(1+Math.random()*MAXVALUE); // 左边的数 134 rightValue = (int)(1+Math.random()*MAXVALUE);// 右边的数 135 switch(symbol){ 136 case 1:{ 137 equ = equ + leftValue + "\t\t\t+\t\t\t" + rightValue; 138 ANSWER[i] = leftValue + rightValue; 139 break; 140 } 141 case 2:{ 142 equ = equ + leftValue + "\t\t\t-\t\t\t" + rightValue; 143 ANSWER[i] = leftValue - rightValue; 144 break; 145 } 146 case 3:{ 147 equ = equ + leftValue + "\t\t\t*\t\t\t" + rightValue; 148 ANSWER[i] = leftValue * rightValue; 149 break; 150 } 151 case 4:{ 152 double tempLeft = Math.max(leftValue, rightValue); 153 double tempRight = Math.min(leftValue,rightValue); 154 equ = equ + tempLeft + "\t\t\t/\t\t\t" + tempRight; 155 ANSWER[i] = tempLeft / tempRight; 156 break; 157 } 158 } 159 160 QUESTION[i] = equ + "\t\t\t="; 161 ANSWER[i] = Double.parseDouble(df.format(ANSWER[i])); 162 } 163 } 164 165 // 显示第i题的题目 166 private void showItem(int i){ 167 et_question.setText(QUESTION[i]); 168 index = i; 169 tv_count.setText(""+(index+1)+"/"+NUMBER); 170 if(USER_ANSWER[i]!=0.0){ 171 et_answer.setText(""+USER_ANSWER[i]); 172 } 173 174 // 如果提交 175 if(isSubmit){ 176 if(ANSWER_CHECK[index] == true){ 177 tv_judge.setText("√"); 178 Toast.makeText(getApplicationContext(), "回答正确" ,Toast.LENGTH_SHORT).show(); 179 } 180 else{ 181 tv_judge.setText("×"); 182 Toast.makeText(getApplicationContext(), "正确答案为"+ANSWER[index],Toast.LENGTH_SHORT).show(); 183 } 184 } 185 186 // 获取焦点 187 et_answer.requestFocus(); 188 } 189 190 // 上一题按钮 191 class LastClick implements OnClickListener{ 192 193 @Override 194 public void onClick(View arg0) { 195 // TODO Auto-generated method stub 196 if(index == 0){ 197 Toast.makeText(getApplicationContext(), "这已经是第一题",Toast.LENGTH_SHORT).show(); 198 } 199 else{ 200 if(!et_answer.getText().toString().equals("")){ // 输入非空 201 try{ 202 USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString()); 203 }catch(Exception e){ 204 e.printStackTrace(); 205 return; 206 } 207 } 208 // 显示上一题 209 index--; 210 et_answer.setText(""); 211 showItem(index); 212 } 213 } 214 215 } 216 217 // 下一题按钮 218 class NextClick implements OnClickListener{ 219 220 @Override 221 public void onClick(View arg0) { 222 // TODO Auto-generated method stub 223 if(index == NUMBER-1){ 224 Toast.makeText(getApplicationContext(), "这已经是最后一题",Toast.LENGTH_SHORT).show(); 225 } 226 else{ 227 // 如果输入非空 228 if(!et_answer.getText().toString().equals("")){ 229 try{ 230 USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString()); 231 }catch(Exception e){ 232 e.printStackTrace(); 233 return; 234 } 235 } 236 237 // 显示下一题 238 index++; 239 et_answer.setText(""); 240 showItem(index); 241 } 242 } 243 244 } 245 246 // 核对答案 247 private boolean check(){ 248 249 // 判定最后一道题目 250 if(!et_answer.getText().toString().equals("")){ 251 try{ 252 USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString()); 253 }catch(Exception e){ 254 e.printStackTrace(); 255 return false; 256 } 257 } 258 259 // 核对所有题目 260 int right = 0; // 答对题数 261 for(int i = 0;i < NUMBER;i++){ 262 if(ANSWER[i] == USER_ANSWER[i]){ 263 right++; 264 ANSWER_CHECK[i] = true; 265 } 266 } 267 268 // 判定提交时正在显示的题目 269 if(ANSWER_CHECK[index] == true){ 270 tv_judge.setText("√"); 271 Toast.makeText(getApplicationContext(), "回答正确" ,Toast.LENGTH_SHORT).show(); 272 } 273 else{ 274 tv_judge.setText("×"); 275 Toast.makeText(getApplicationContext(), "正确答案为"+ANSWER[index],Toast.LENGTH_SHORT).show(); 276 } 277 278 String str = "此次答题共" + NUMBER + "道题,答对" + right + "题。"; 279 tv_check.setText(str); 280 281 return true; 282 } 283 284 // 重置函数 285 private void reset(){ 286 // 重置变量 287 index = 0; 288 NUMBER = 0; 289 ANSWER = new double[MAXNUMBER]; 290 QUESTION = new String[MAXNUMBER]; 291 USER_ANSWER = new double[MAXNUMBER]; 292 ANSWER_CHECK = new boolean[MAXNUMBER]; 293 294 // 重置控件 295 btn_confirm.setEnabled(true); 296 et_number.setEnabled(true); 297 tv_count.setText("0/0"); 298 et_answer.setText(""); 299 tv_check.setText(""); 300 tv_judge.setText(""); 301 et_number.setText(""); 302 et_question.setText(""); 303 304 } 305 306 307 }
四、实验截图
时间: 2024-10-15 01:08:47