上个帖子当中的代码没有检查自动生成的题目是否有重复的部分,今天进行了添加,当自动生成随机数的次数大于所需生成的题目的数量的平方倍时,程序自动结束并输出提示语

 

  1 import java.util.Random;
  2 
  3 public class fun {
  4     public int len1;//打印个数
  5     public int len2;//操作数个数
  6     public int multi;//乘除法
  7     public int paren;//括号
  8     public int leftR;//最小值
  9     public int rightR;//最大值
 10     public int leftP;//左括号
 11     public int rightP;//右括号
 12     public int index;//记录重复生成次数是否过多
 13 
 14     public fun() {
 15         this.len1 = 0;
 16         this.len2 = 0;
 17         this.multi = 0;
 18         this.paren = 0;
 19         this.leftR = 0;
 20         this.rightR = 0;
 21         this.index = 0;
 22     }
 23 
 24     public void f(int i1, int i2, int i3, int i4, int i5, int i6) {
 25 
 26         this.len1 = i1;
 27         this.len2 = i2;
 28         this.multi = i3;
 29         this.paren = i4;
 30         this.leftR = i5;
 31         this.rightR = i6;
 32         //System.out.println("------"+i1);
 33         //System.out.println("------"+i2);
 34 
 35         if (this.multi == 1) {
 36             this.multi = 4;
 37         } else {
 38             this.multi = 2;
 39         }
 40 
 41         Random random = new Random();
 42 
 43 
 44         int[] a = new int[len1];//存储操作数
 45         int[] b = new int[len2];//存储操作符
 46         String[] jiLu = new String[len1];//记录出现过的题目
 47 
 48         int i = 0;
 49         if (this.paren == 1) {
 50             this.paren = len1;
 51         }
 52 
 53         while (i < len1) {
 54 
 55             jiLu[i] = "";
 56 
 57             for (int j = 0; j < len2; j++) {//生成操作数
 58                 //System.out.println(j);
 59                 a[j] = random.nextInt(this.rightR - this.leftR + 1) + this.leftR;
 60                 //101+200=200-300
 61             }
 62 
 63             String str = String.valueOf(a);
 64             jiLu[i] += str;
 65 
 66             for (int j = 0; j < len2 - 1; j++) {//生成操作符
 67                 b[j] = random.nextInt(this.multi);
 68             }
 69 
 70             str = String.valueOf(b);
 71             jiLu[i] += str;
 72             jiLu[i] += str;
 73 
 74             if (this.paren != 0) {
 75                 //0+0+0=
 76                 this.leftP = random.nextInt(len2 - 1);//左括号能存在的位置
 77                 //System.out.print("------"+this.leftP);
 78                 //0,1,2,3,4
 79                 this.rightP = random.nextInt(len2 - this.leftP - 1) + this.leftP + 1;//右括号位置
 80                 //System.out.println("------"+this.leftP);
 81             }
 82 
 83             str = String.valueOf(this.leftP);
 84             jiLu[i] += str;
 85             str = String.valueOf(this.rightP);
 86             jiLu[i] += str;
 87 
 88             //System.out.println("----------" + jiLu[i]);
 89             //System.out.println("-------2");
 90             int flag = 0;
 91             for (int j = 0; j < i && flag == 0; j++) {
 92                 //System.out.println("-------1");
 93                 //System.out.println(jiLu[j]);
 94                 if (jiLu[j].equals(jiLu[i])) {
 95                     flag = 1;
 96                     this.index++;
 97                 }
 98             }
 99 
100             //System.out.println("-------3");
101             if (this.index >= len1 * len1) {
102                 i = len1;
103                 System.out.println("重复生成次数过多,程序自动结束,请检查操作数个数与生成题目之间是否合法");
104             }
105             if (flag == 0) {
106                 int iFlag = 0;
107                 for (int j = 0; j < len2; j++) {
108 
109                     if (this.paren >= 1 && this.leftP == j) {
110                         System.out.print("(");
111                     }
112                     System.out.print(a[j]);
113                     if (this.paren >= 1 && this.rightP == j) {
114                         System.out.print(")");
115                         this.paren--;
116                     }
117                     if (iFlag != len2 - 1) {
118                         this.f2(b[j]);
119                     }
120                     iFlag++;
121 
122                 }
123 
124                 System.out.println("=");
125 
126                 //System.out.println(i);
127 
128                 i++;
129             }
130 
131         }
132     }
133 
134     public void f2(int i) {
135         if (i == 0) {
136             System.out.print("+");
137         } else if (i == 1) {
138             System.out.print("-");
139         } else if (i == 2) {
140             System.out.print("*");
141         } else if (i == 3) {
142             System.out.print("/");
143         }
144     }
145 }