import java.awt.*;
站在用户的角度思考问题,与客户深入沟通,找到梧州网站设计与梧州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟空间、企业邮箱。业务覆盖梧州地区。
import javax.swing.*;
import java.awt.event.*;
public class Teacher {
int numberOne,numberTwo;
String operator="";
boolean right;
public int giveNumberOne(int n){
numberOne=(int)(Math.random()*n)+1;
return numberOne;
}
public int giveNumberTwo(int n){
numberTwo=(int)(Math.random()*n)+1;
return numberTwo;
}
public String giveOperator(){
double d=Math.random();
if(d=0.8)
operator="+";
else if(d0.8d0.5)
operator="-";
else if(d=0.5d0.2)
operator="*";
else if(d=0.2)
operator="/";
return operator;
}
public boolean getRight(int answer){
if(operator.equals("+")){
if(answer==numberOne+numberTwo)
right=true;
else
right=false;
}
else if(operator.equals("-")){
if(answer==numberOne-numberTwo)
right=true;
else
right=false;
}
else if(operator.equals("*")){
if(answer==numberOne*numberTwo)
right=true;
else
right=false;
}
else if(operator.equals("/")){
if(answer==numberOne/numberTwo)
right=true;
else
right=false;
}
return right;
}
}
public class ComputerJFrame extends JFrame implements ActionListener{
TextField textOne,textTwo,textResult;
Button getProblem,giveAnswer;
Label operatorLabel,message;
Teacher teacher;
ComputerJFrame(String s){
super(s);
teacher = new Teacher();
setLayout(new FlowLayout());
textOne = new TextField(10);
textTwo = new TextField(10);
textResult = new TextField(10);
operatorLabel = new Label("+");
message = new Label("你还没有回答呢");
getProblem = new Button("获取题目");
giveAnswer = new Button("确认答案");
add(getProblem);
add(textOne);
add(operatorLabel);
add(textTwo);
add(new Label("="));
add(textResult);
add(giveAnswer);
add(message);
textResult.requestFocus();
textOne.setEditable(false);//该方法设置文本框的可编辑性
textTwo.setEditable(false);
getProblem.addActionListener(this);//创建监视器
giveAnswer.addActionListener(this);
textResult.addActionListener(this);
setBounds(100,100,450,100);//设置出现屏幕上时的初始位置
setLocationRelativeTo(null);//居中
setVisible(true);//窗口的可见性
validate();
addWindowFocusListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==getProblem){
int number1 = teacher.giveNumberOne(100);
int number2 = teacher.giveNumberTwo(100);
String operator = teacher.giveOperator();
textOne.setText(""+number1);//设置文本框中为参数字符串指定的文本
textTwo.setText(""+number2);
operatorLabel.setText(operator);
message.setText("请回答");
textResult.setText(null);
}
if(e.getSource()==giveAnswer){
String answer = textResult.getText();
try{ int result = Integer.parseInt(answer);
if(teacher.getRight(result)==true){
message.setText("你回答正确");
}
else{
message.setText("你回答错误");
}
}
catch(NumberFormatException ex){
message.setText("请输入数字字符");
}
}
textResult.requestFocus();
validate();
}
}
public class MainClass {
public static void main(String[] args) {
ComputerJFrame frame;
frame = new ComputerJFrame("算术测试");
}
}
import java.util.Random;
import java.util.Scanner;
public class TestRandom {
public static void main(String[] args) {
Random rand = new Random();
Scanner input = new Scanner(System.in);
while(true){
int a = rand.nextInt(100);
int b = rand.nextInt(100);
int result = a+b;
System.out.println(a+"+"+b+"=?");
int yourGuess=input.nextInt();
if(yourGuess == result){
System.out.println("you are right");
}else {
System.out.println("you are wrong");
}
}
}
}
花了好几个小时,测试通过,希望楼主多给点分
import java.util.Scanner;
class Question{
private int firstParam;
private int secondParam;
private String operator;
private int answer;
private int score;
public int getFirstParam() {
return firstParam;
}
public void setFirstParam(int firstParam) {
this.firstParam = firstParam;
}
public int getSecondParam() {
return secondParam;
}
public void setSecondParam(int secondParam) {
this.secondParam = secondParam;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public int getAnswer() {
return answer;
}
public void setAnswer(int answer) {
this.answer = answer;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
//构造
public Question(int firstParam, int secondParam) {
this.firstParam = firstParam;
this.secondParam = secondParam;
}
}
public class StudentStudy {
private int questionNumber;
private String operator;
private Question[] questions;
private int rightNumber=0;
private int wrongNumber=0;
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public int getQuestionNumber() {
return questionNumber;
}
public void setQuestionNumber(int questionNumber) {
this.questionNumber = questionNumber;
}
public int getRightNumber() {
return rightNumber;
}
public void setRightNumber(int rightNumber) {
this.rightNumber = rightNumber;
}
public int getWrongNumber() {
return wrongNumber;
}
public void setWrongNumber(int wrongNumber) {
this.wrongNumber = wrongNumber;
}
public Question[] getQuestions() {
return questions;
}
public void setQuestions(Question[] questions) {
this.questions = questions;
}
public int getRandom(){
return (int)(Math.random()*10);
}
public int calculateByOperator(String operator,int first,int second){
switch(operator.charAt(0)){
case '+':
return first+second;
case '-':
return first-second;
default:
return 0;
}
}
public void makeQuestion(){
mywhile:
while(questions[questionNumber-1]==null){
Question question=new Question(getRandom(),getRandom());
for(int i=0;questions[i]!=nulliquestionNumber;i++){
if((question.getFirstParam()==questions[i].getFirstParam())(question.getSecondParam()==questions[i].getSecondParam())){
continue mywhile;
}
}
for(int i=0;iquestionNumber;i++){
if(questions[i]==null){
questions[i]=question;
questions[i].setOperator(operator);
questions[i].setScore(100/questionNumber);
questions[i].setAnswer(calculateByOperator(operator,questions[i].getFirstParam(),questions[i].getSecondParam()));
break;
}
}
}
}
public StudentStudy(int questionNumber){
this.questionNumber=questionNumber;
questions=new Question[this.questionNumber];
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("现在开始测试,请填写要测试的试题数量(1-100):");
int number=input.nextInt();
StudentStudy ss=new StudentStudy(number);
System.out.println("请选择要测试的试题类型:1加法2减法");
int type=input.nextInt();
switch(type){
case 1:
ss.setOperator("+");
break;
case 2:
ss.setOperator("-");
break;
default:
System.out.println("输入有误,退出系统!");
System.exit(0);
}
ss.makeQuestion();
for(int i=0;inumber;i++){
System.out.println("第"+(i+1)+"题:"+ss.getQuestions()[i].getFirstParam()+ss.getQuestions()[i].getOperator()+ss.getQuestions()[i].getSecondParam()+"=?");
int answer=input.nextInt();
if(ss.getQuestions()[i].getAnswer()==answer){
ss.setRightNumber(ss.getRightNumber()+1);
System.out.println("回答正确!");
}
else{
ss.setWrongNumber(ss.getWrongNumber()+1);
System.out.println("回答错误!");
}
}
System.out.println("您总共答了"+ss.getQuestionNumber()+"道题,答对"+ss.getRightNumber()+"道,答错"+ss.getWrongNumber()+"道,最后总分为:"+ss.getRightNumber()*100/ss.getQuestionNumber()+"分");
}
}
你的想法是好的,但是我仔细构思了一遍,太难了。
首先难点就是怎么生成题目。也是最难得,因为有太多不确定,弄不好就会出现负数结果的题目。
然后是题目的解答,这个难点就不说了,这个我在几年前就写好了。一直没用上,现在却用上了。
还有,你要窗体,可是我不会用swing
还有你要的四则混合运算是多长的,我总不能写一个有1000多个数字写成的式子吧。
题目中是否涉及到小数
下面是我的计算代码:
package compute;
public class CaculateString {
private String str, s;
private int p1, p2;
public CaculateString(String str) {
this.str = str;
this.clear();
this.check();
}
public String caculate() {
while (isEnd(str)) {
p2 = str.indexOf(")");
if (p2 != -1) {
s = str.substring(0, p2);
p1 = s.lastIndexOf("(");
s = str.substring(p1 + 1, p2);
if (!s.equals("")) {
s = this.caculateNumber(s);
if (p2 == (str.length() - 1))
str = str.substring(0, p1) + s;
else
str = str.substring(0, p1) + s + str.substring(p2 + 1);
} else {
str = str.substring(0, p1) + str.substring(p2 + 1);
}
} else
str = this.caculateNumber(str);
}
return str;
}
private String caculateNumber(String ss) {
int p3 = 0, p4 = 0, p5 = 0;
char b = ' ', c = ' ';
String s1 = null, s2 = null;
double d1 = 0.0, d2 = 0.0, d3 = 0.0;
if (ss.charAt(0) == '+') {
ss = ss.substring(1);
if (ss.indexOf("+") == -1 ss.indexOf("-") == -1
ss.indexOf("*") == -1 ss.indexOf("/") == -1)
return ss;
} else if (ss.charAt(0) == '-') {
if (ss.indexOf("+", 1) == -1 ss.indexOf("-", 1) == -1
ss.indexOf("*", 1) == -1 ss.indexOf("/", 1) == -1)
return ss;
}
while (isEnd2(ss)) {
p3 = 0;
p4 = 0;
p5 = 0;
if (ss.indexOf("*") == -1 ss.indexOf("/") == -1) {
for (int i = 0; i ss.length(); i++) {
b = ss.charAt(i);
if (b == '+' || b == '-') {
if (p3 == 0 i != 0) {
p3 = i;
c = b;
} else if (p3 != 0 i != (p3 + 1)) {
p4 = i;
break;
}
}
}
if (p4 == 0) {
s1 = ss.substring(0, p3);
s2 = ss.substring(p3 + 1);
} else {
s1 = ss.substring(0, p3);
s2 = ss.substring(p3 + 1, p4);
}
d1 = Double.parseDouble(s1);
d2 = Double.parseDouble(s2);
if (c == '+')
d3 = d1 + d2;
else if (c == '-')
d3 = d1 - d2;
if (p4 == 0)
ss = new Double(d3).toString();
else
ss = new Double(d3).toString() + ss.substring(p4);
} else {
if (ss.indexOf("*") == -1) {
c = '/';
p4 = ss.indexOf("/");
} else if (ss.indexOf("/") == -1) {
c = '*';
p4 = ss.indexOf("*");
} else if (ss.indexOf("*") ss.indexOf("/")) {
c = '/';
p4 = ss.indexOf("/");
} else if (ss.indexOf("*") ss.indexOf("/")) {
c = '*';
p4 = ss.indexOf("*");
}
for (int i = p4 - 1; i = 0; i--) {
b = ss.charAt(i);
if (b == '+' || b == '-') {
if ((i - 1) != 0 ss.charAt(i - 1) != '+'
ss.charAt(i - 1) != '-') {
p3 = i;
break;
} else if ((i - 1) != 0
(ss.charAt(i - 1) == '+' || ss.charAt(i - 1) == '-')) {
p3 = i - 1;
break;
}
}
}
for (int i = p4 + 1; i ss.length(); i++) {
b = ss.charAt(i);
if ((b == '+' || b == '-' || b == '*' || b == '/')
(i - 1) != p4) {
p5 = i;
break;
}
}
if (p3 == 0)
s1 = ss.substring(0, p4);
else
s1 = ss.substring(p3 + 1, p4);
if (p5 == 0)
s2 = ss.substring(p4 + 1);
else
s2 = ss.substring(p4 + 1, p5);
d1 = Double.parseDouble(s1);
d2 = Double.parseDouble(s2);
if (c == '*')
d3 = d1 * d2;
else if (c == '/')
d3 = d1 / d2;
if (p3 == 0 p5 == 0)
ss = new Double(d3).toString();
else if (p3 == 0 p5 != 0)
ss = new Double(d3).toString() + ss.substring(p5);
else if (p3 != 0 p5 == 0)
ss = ss.substring(0, p3 + 1) + new Double(d3).toString();
else if (p3 != 0 p5 != 0)
ss = ss.substring(0, p3 + 1) + new Double(d3).toString()
+ ss.substring(p5);
}
}
return ss;
}
private boolean isEnd(String str) {
if (str.indexOf("(") != -1 || str.indexOf(")") != -1
|| str.indexOf("+", 1) != -1 || str.indexOf("-", 1) != -1
|| str.indexOf("*", 1) != -1 || str.indexOf("/", 1) != -1)
return true;
return false;
}
private boolean isEnd2(String ss) {
if (ss.indexOf("+", 1) != -1 || ss.indexOf("-", 1) != -1
|| ss.indexOf("*", 1) != -1 || ss.indexOf("/", 1) != -1)
return true;
return false;
}
private void clear() {
str = str.replaceAll(" ", "");
}
private void check() {
int right = 0, left = 0;
for (int i = 0; i str.length(); i++) {
char a = str.charAt(i);
if (a != '0' a != '1' a != '2' a != '3' a != '4'
a != '5' a != '6' a != '7' a != '8' a != '9'
a != '+' a != '-' a != '*' a != '/' a != '('
a != ')' a != '.') {
System.exit(0);
}
if (a == '(')
left++;
else if (a == ')')
right++;
}
if (left != right) {
System.exit(0);
}
}
public static void main(String args[]) {
System.out.println(new CaculateString("((1-(0/3))*7)+8").caculate());
}
}
你好,按照你的要求代码如下,可以直接运行
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test {
public static void main(String[] args) {
int count = 0;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i 10; i++) {
int a = (int) (Math.random() * 100);
int b = (int) (Math.random() * 100);
int c = (int) (Math.random() * 2);
int r = 0;
switch (c) {
case 0:
if (a + b = 100) {
a = 100 - b;
}
System.out.print(a + " + " + b + " = ");
r = a + b;
break;
case 1:
if (a b) {
int t = a;
a = b;
b = t;
}
System.out.print(a + " - " + b + " = ");
r = a - b;
}
int input;
try {
input = Integer.valueOf(in.readLine());
} catch (Exception e1) {
System.out.println("答案错误\n");
continue;
}
if (input == r) {
count++;
System.out.println("答案正确\n");
} else {
System.out.println("答案错误\n");
}
}
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("答对数量:" + count + "\n得分: " + count * 10);
}
}