鱼C论坛

 找回密码
 立即注册
查看: 2830|回复: 1

[已解决]一道简单运算题,求大神解答!

[复制链接]
发表于 2020-11-11 17:54:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用java写一小学数学运算:要求编写一个模拟出题给小学生进行10以内加减法的程序。根据输入题数出题,判断做题是否正确,并在小学生完成所有题目后计算分数。
最佳答案
2020-11-11 22:51:22
出题类:
package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;
import java.util.regex.Pattern;

public class AddsubCalc {
        private int num = -1; // 题数
        private LinkedHashMap<String, int[]> subject; // key:题目,value[]:答案 结果
        private static final char ADD = '+';
        private static final char SUB = '-';

        public int getNum() {
                return num;
        }

        /**
         * 出题数目
         * @throws IOException
         */
        public void setNum() throws IOException {
                System.out.print("请输入出题数目:");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                while(!isNumber(line = br.readLine())) {
                        System.out.println("请输入数字!");
                        System.out.print("请输入出题数目:");
                        continue;
                }        
                this.num = Integer.parseInt(line);
        }

        public AddsubCalc() {
                super();
                this.subject = new LinkedHashMap<String, int[]>();
        }

        // 获取一个10以内的随机数
        private int getWithinten() {
                return (int) (Math.random() * 10 + 1);
        }

        // 获取随机+ -运算符
        private char getOperator() {
                return new Random().nextBoolean() ? ADD : SUB;
        }

        // 生成题目
        private void makeSubject() {
                // 根据输入的数量生成表达式和结果
                int a, b, result;

                while (this.subject.size() < this.num) {
                        StringBuilder s = new StringBuilder();
                        a = getWithinten();
                        b = getWithinten();
                        s.append(a);
                        
                        if (getOperator() == ADD) {
                                result = a + b;
                                s.append(ADD);

                        } else {
                                result = a - b;
                                s.append(SUB);
                        }
                        s.append(b);
                        s.append(" = ");
                        int tmp[] = { result, 0 };
                        this.subject.put(s.toString(), tmp);
                }

        }

        /**
         * 获取题目
         */
        public void outSubject() {
                if(this.num==-1) {
                        throw new RuntimeException("请先调用setNum设置出题数目!");
                }
                
                this.makeSubject();
                for (String subject : subject.keySet()) {
                        System.out.println(subject);
                }
        }

        // 判断是否为Int
        private boolean isInteger(String str) {
                Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
                return pattern.matcher(str.trim()).matches();
        }

        // 判断一个字符串是否由数字组成
        public boolean isNumber(String temp) {
                char[] data = temp.trim().toCharArray();
                for (int x = 0; x < data.length; x++) {
                        if (data[x] > '9' || data[x] < '0') {
                                return false;// 后续不再判断
                        }
                }
                return true;// 如果全部验证通过返回true
        }

        /**
         * 答题
         * @throws IOException
         */
        public void getAnswer() throws IOException {
                if(this.subject.size()==0) {
                        throw new RuntimeException("请先调用outSubject获取题目!");
                }
                
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                for (Map.Entry<String, int[]> m : this.subject.entrySet()) {
                        String q = m.getKey();
                        System.out.print(q);
                        while (true) {

                                if (!isInteger(line = br.readLine())) {
                                        System.out.println("请输入数字!");
                                        System.out.print(q);
                                        continue;
                                }
                                int[] v = m.getValue();
                                v[1] = Integer.parseInt(line);
                                m.setValue(v);
                                break;
                        }
                }
        }

        /**
         * 答题结果
         */
        public void getResult() {
                int totalScore = 0;
                for (Map.Entry<String, int[]> m : this.subject.entrySet()) {
                        String k = m.getKey();
                        int[] v = m.getValue();
                        String tmp;
                        tmp = k + Integer.toString(v[0]) + " 你 " + Integer.toString(v[1]);
                        if (v[0] == v[1]) {
                                tmp = tmp + " √";
                                totalScore += 1;
                        } else {
                                tmp = tmp + " ×";
                        }
                        System.out.println(tmp);
                }
                System.out.println("总分 " + this.subject.size() + "分 你的分数是:" + totalScore);
        }

}

调用:
package test;

import java.io.IOException;

public class MathProblem {

        public static void main(String[] args) throws IOException {
                AddsubCalc calc = new AddsubCalc();                

                // 出题数目
                calc.setNum();
                
                // 获取题目
                calc.outSubject();
        
                // 答题
                System.out.println("请回答:");
                calc.getAnswer();
                
                // 结果
                System.out.println("结果:");
                calc.getResult();

        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-11 22:51:22 | 显示全部楼层    本楼为最佳答案   
出题类:
package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Random;
import java.util.regex.Pattern;

public class AddsubCalc {
        private int num = -1; // 题数
        private LinkedHashMap<String, int[]> subject; // key:题目,value[]:答案 结果
        private static final char ADD = '+';
        private static final char SUB = '-';

        public int getNum() {
                return num;
        }

        /**
         * 出题数目
         * @throws IOException
         */
        public void setNum() throws IOException {
                System.out.print("请输入出题数目:");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                while(!isNumber(line = br.readLine())) {
                        System.out.println("请输入数字!");
                        System.out.print("请输入出题数目:");
                        continue;
                }        
                this.num = Integer.parseInt(line);
        }

        public AddsubCalc() {
                super();
                this.subject = new LinkedHashMap<String, int[]>();
        }

        // 获取一个10以内的随机数
        private int getWithinten() {
                return (int) (Math.random() * 10 + 1);
        }

        // 获取随机+ -运算符
        private char getOperator() {
                return new Random().nextBoolean() ? ADD : SUB;
        }

        // 生成题目
        private void makeSubject() {
                // 根据输入的数量生成表达式和结果
                int a, b, result;

                while (this.subject.size() < this.num) {
                        StringBuilder s = new StringBuilder();
                        a = getWithinten();
                        b = getWithinten();
                        s.append(a);
                        
                        if (getOperator() == ADD) {
                                result = a + b;
                                s.append(ADD);

                        } else {
                                result = a - b;
                                s.append(SUB);
                        }
                        s.append(b);
                        s.append(" = ");
                        int tmp[] = { result, 0 };
                        this.subject.put(s.toString(), tmp);
                }

        }

        /**
         * 获取题目
         */
        public void outSubject() {
                if(this.num==-1) {
                        throw new RuntimeException("请先调用setNum设置出题数目!");
                }
                
                this.makeSubject();
                for (String subject : subject.keySet()) {
                        System.out.println(subject);
                }
        }

        // 判断是否为Int
        private boolean isInteger(String str) {
                Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
                return pattern.matcher(str.trim()).matches();
        }

        // 判断一个字符串是否由数字组成
        public boolean isNumber(String temp) {
                char[] data = temp.trim().toCharArray();
                for (int x = 0; x < data.length; x++) {
                        if (data[x] > '9' || data[x] < '0') {
                                return false;// 后续不再判断
                        }
                }
                return true;// 如果全部验证通过返回true
        }

        /**
         * 答题
         * @throws IOException
         */
        public void getAnswer() throws IOException {
                if(this.subject.size()==0) {
                        throw new RuntimeException("请先调用outSubject获取题目!");
                }
                
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                for (Map.Entry<String, int[]> m : this.subject.entrySet()) {
                        String q = m.getKey();
                        System.out.print(q);
                        while (true) {

                                if (!isInteger(line = br.readLine())) {
                                        System.out.println("请输入数字!");
                                        System.out.print(q);
                                        continue;
                                }
                                int[] v = m.getValue();
                                v[1] = Integer.parseInt(line);
                                m.setValue(v);
                                break;
                        }
                }
        }

        /**
         * 答题结果
         */
        public void getResult() {
                int totalScore = 0;
                for (Map.Entry<String, int[]> m : this.subject.entrySet()) {
                        String k = m.getKey();
                        int[] v = m.getValue();
                        String tmp;
                        tmp = k + Integer.toString(v[0]) + " 你 " + Integer.toString(v[1]);
                        if (v[0] == v[1]) {
                                tmp = tmp + " √";
                                totalScore += 1;
                        } else {
                                tmp = tmp + " ×";
                        }
                        System.out.println(tmp);
                }
                System.out.println("总分 " + this.subject.size() + "分 你的分数是:" + totalScore);
        }

}

调用:
package test;

import java.io.IOException;

public class MathProblem {

        public static void main(String[] args) throws IOException {
                AddsubCalc calc = new AddsubCalc();                

                // 出题数目
                calc.setNum();
                
                // 获取题目
                calc.outSubject();
        
                // 答题
                System.out.println("请回答:");
                calc.getAnswer();
                
                // 结果
                System.out.println("结果:");
                calc.getResult();

        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表