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