標籤:
設計思想: 題目避免重複 將每次產生的三個隨機數分別存入三個數組,產生的新隨機數與已經產生的每個進行比較,若三個都相同則重新產生前兩個,直到不相同。
控制是否有乘除 通過控制產生代表運算子的隨機數來控制是否有乘除號的產生,隨機數為0到1,則無乘除,隨機數為0到3則有乘除。
控制數值範圍 通過Math.random()函數來控制隨機數產生的範圍。
控制加減有無負數 只有減法有負數,所以只要在減號運算子裡添加if語句,無負數,則a必須大於b,否則重建,計數減一,有負數,則a必須小於b;
控制除法有無餘數 只要在除號運算子裡添加if語句,有餘數,則a不能整除b,否則跳出迴圈,計數減一;無餘數,則a能整除b,否則跳出迴圈,計數減一。
控制括弧未做出來。
原始碼:
import java.util.Scanner;
public class A{
public static void main(String []args){
int a,b,c,n=0,m=0,q,w; String str=null;
Scanner reader=new Scanner(System.in);
System.out.print("整數運算請選 1,真分數運算請選 2:");
n=reader.nextInt();
System.out.print("請選擇題目數量:");
m=reader.nextInt();
System.out.print("請選擇範圍:");
q=reader.nextInt();
w=reader.nextInt();
//整數
if(n==1)
{ int e,f,g;
System.out.print("請選擇是否有乘除: 1 有 2 無");
e=reader.nextInt();
System.out.print("請選擇加減有無負數: 1 有 2 無");
f=reader.nextInt();
System.out.print("請選擇乘除有無餘數: 1 有 2 無");
g=reader.nextInt();
for(int i=1;i<=m;i++)
{ int z[]=new int[m+1];int x[]=new int[m+1];int v[]=new int[m+1];
a=(int)(Math.random()*(w-q+1)+q);
b=(int)(Math.random()*(w-q+1)+q);
if(e==1) //控制運算有乘除
{c=(int)(Math.random()*4+0);}
else //控制運算無乘除
{ c=(int)(Math.random()*2+0);}
z[i]=a;x[i]=b;v[i]=c; //將隨機產生的數存入三個數組
for(int j=1;j<=i-1;j++) //通過判斷隨機數的異同控制是否重複
{
if(z[i]==z[j]&&x[i]==x[j]&&v[i]==v[j])
{ do //重複則重建ab
{
a=(int)(Math.random()*(w-q+1)+q);
b=(int)(Math.random()*(w-q+1)+q);
}while(z[i]==z[j]&&x[i]==x[j]&&v[i]==v[j]);
}
}
switch(c)
{ case 0:
System.out.print(a+"+"+b+"="+"\t");
break;
case 1:
if(f==1) //加減有餘數
{System.out.print(a+"-"+b+"="+"\t");
break;}
else //加減無餘數
{if(a<b)
{i--;break;}
else
{System.out.print(a+"-"+b+"="+"\t");}
}
case 2:
System.out.print(a+"*"+b+"="+"\t");
break;
case 3:
if(b==0) //除數為0 則跳出迴圈i減一
{i--;break;}
else if(b!=0&&g==2) //乘除無餘數
{
if(a%b==0)
{System.out.print(a+"/"+b+"="+"\t");}
else
{i--;break;}
}
else if(b!=0&&g==1) //乘除有餘數
{ if(a%b==0)
{i--;break;}
else
{System.out.print(a+"/"+b+"="+"\t"); break;}
}
}
if(i%5==0) //5個算式一行輸出
{System.out.print("\n");}
}
}
}
}
結果:
個人作業軟體工程02