一、运行流程
- 程序分为两个部分,主程序和四则运算程序。
- 命令行运行方式:
- javac Main.java 这是第一个程序编译
- javac Cal.java这是第二个程序编译
- 然后运行,java Main 30// 30为要生成的题目数,你可以换成其他的
二、程序代码部分
- 这是main函数,保存至Main.java文件夹即可
import java.io.PrintStream;
public class Main{
public static void main(String[] args){
int n=Integer.parseInt(args[0]);
if(n<1||n>1000){
System.out.println("输入失败,请输入小于1000的正整数!");
}else{
System.out.println("输入成功!");
try {
PrintStream ps = new PrintStream("../result.txt");
System.setOut(ps);
}catch(Exception e){
System.out.println("创建result文件失败!");
}
System.out.println("小学森,就决定是你了");
Cal.QuesFunc(n);
}
}
}
- 这是四则运算程序,保存至Cal.java即可
import java.util.Random;
public class Cal {
public static void Integer(){
String arith1 = null;
char[]optCom = {'+','-','*','÷'};
Random random = new Random();
int optIdx = random.nextInt(4);
int sum1 = 0;
int optNum = random.nextInt(3) + 3;
int a = random.nextInt(100);
int b = random.nextInt(100);
if(optCom[optIdx] == '+') sum1 = a + b;
if(optCom[optIdx] == '*') sum1 = a * b;
if(optCom[optIdx] == '-'){
while(a-b < 0)
{
a = random.nextInt(100);
b = random.nextInt(100);
}
sum1 = a - b;
}
if(optCom[optIdx] == '÷'){
if (b == 0)
b = random.nextInt(100);
while (a%b != 0) {
a = random.nextInt(100);
b = random.nextInt(100);
}
sum1 = a/b;
}
arith1 = a + "" + optCom[optIdx] + "" + b;
for(int j = 1; j < optNum; j++){
int optIdx1 = random.nextInt(4);
int c = random.nextInt(100);
if(optCom[optIdx1] == '+'){
sum1 += c;
arith1 = arith1 + "" + optCom[optIdx1] + "" + c;
}
if(optCom[optIdx1] == '-'){
while(sum1-c<0)
{
c=random.nextInt(100);
}
sum1 += c;
arith1 = arith1 + "" + optCom[optIdx1] + "" + c;
}
if(optCom[optIdx1] == '*'){
if(optCom[optIdx] == '+' || optCom[optIdx] == '-')
{
arith1 = "(" + arith1 + ")" + optCom[optIdx1] + c;
}
else
{
arith1 = arith1 + "" + optCom[optIdx1] + "" + c;
}
sum1 = sum1*c;
}
if(optCom[optIdx1] == '÷'){
while (c == 0 || sum1%c != 0) {
c=random.nextInt(100);
}
if(optCom[optIdx] == '+' || optCom[optIdx] == '-')
{
arith1= "(" + arith1 + ")" + optCom[optIdx1] + c;
}
else
{
arith1 = arith1 + "" + optCom[optIdx1] + "" + c;
}
sum1 = sum1/c;
}
}
System.out.println(arith1 + "=" + sum1);
}
public static void Fraction(){
String arith2 = null;
char[]optSim = {'+','-'};
Random random = new Random();
int mole = 0;
int deno = 0;
int optNum = random.nextInt(3) + 3;
int mole1 = random.nextInt(20)+1;
int deno1 = random.nextInt(20)+1;
if (mole1 != 0 && deno1 != 0) {
if (mole1 > deno1) {
int temp = mole1;
mole1 = deno1;
deno1 = temp;
}
if (mole1 == deno1) {
mole1 = random.nextInt(20);
}
int gcd1 = gcd(mole1, deno1);
deno1 = deno1 / gcd1;
mole1 = mole1 / gcd1;
}
arith2 = mole1 + "/" + deno1;
for (int k = 0; k < optNum; k++) {
int deno2 = random.nextInt(20);
int mole2 = random.nextInt(20);
if (mole2 != 0 && deno2 != 0) {
if (mole2 > deno2) {
int temp = mole2;
mole2 = deno2;
deno2 = temp;
}
if (mole2 == deno2) {
mole2 = random.nextInt(20);
}
int gcd2 = gcd(mole2, deno2);
deno2 = deno2 / gcd2;
mole2 = mole2 / gcd2;
}
int idx = random.nextInt(2);
if (optSim[idx] == '+') {
if (deno1 == deno2) {
mole = mole1 + mole2;
} else {
deno = deno1 * deno2;
mole = mole1 * deno2 + mole2 * deno1;
}
if (mole > deno) {
k--;
} else {
int gcd = gcd(mole, deno);
deno = deno / gcd;
mole = mole / gcd;
arith2 = arith2 + optSim[idx] + mole2 + "/" + deno2;
deno1 = deno;
mole1 = mole;
}
} else {
if (deno1 == deno2) {
mole = mole1 - mole2;
} else {
deno = deno1 * deno2;
mole = mole1 * deno2 - mole2 * deno1;
}
if (mole < 0) {
k--;
} else {
int gcd = gcd(mole, deno);
deno = deno / gcd;
mole = mole / gcd;
arith2 = arith2 + optSim[idx] + mole2 + "/" + deno2;
deno1 = deno;
mole1 = mole;
}
}
}
System.out.println(arith2 + " = " + mole + "/" + deno);
}
public static int gcd(int a, int b){
while(a!=0)
return gcd(b % a, a);
return b;
}
public static void QuesFunc(int n) {
Random random = new Random();
for (int i = 0; i < n; i++) {
int flag = random.nextInt(4);
if (flag == 0 || flag == 2) {
Integer();
} else {
Fraction();
}
}
}
}