话不多说先看体目:
请判断101-200之间的素数,并在控制打印出来。这道题源于H_Z中的Z的问题,后来才知道是java100例上的一道小测试题。
拿到题我大概分析了下。素数只能除1和本身没有余数。那么很好这明显是一个双层循环。
第一次的代码:
public class H_Z07 {
public static void main(String[] args) {
for(int i = 101;i < 200 ; i++){
for(int j = 2 ;j < i ; j++){
if(i % j == 0){
break;
}else{
System.out.println(i);
}
}
}
}
}
输出为:
101
101
.....
199
199
一个很长的循环输出这个是H和Z商讨的结果,好像结果没法控制。
怎么控制呢?
Z的解决方案:
public class Z_H01 {
public static void main(String[] args) {
int i , j;
for( i = 101;i < 200 ; i++){
for(j = 2 ;j < i ; j++){
if(i % j == 0){
break;
}
}
if(i == j){
System.out.print(i+“ ”);
}
}
}
}
运行结果:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
完美解决,但是H好像没有懂
H在思考中....
陷入第一误区:
j的值到底等于多少好像最大是198为什么i ==j的时候j却等了199。
同时又陷入了第二个误区:
i == j的时候为什么是等等于他本身才输出为什么,不是在i % j ==0输出更加完美!!
H只能偷偷的修改代码为:
public class H_Z09 {
public static void main(String[] args) {
int i , j;
for( i = 101;i < 200 ; i++){
for(j = 2 ;j < i ; j++){
if(i % j == 0){
break;
}else{
System.out.println(i+" "+j+" ");
}
}
/*if(i == j){
System.out.print(i+" ");
}*/
}
}
}
输出为:
101 2
101 3
101 4
101 5
101 6
...
199 195
199 196
199 197
199 198
H看到这个地方彻底傻了,这个证明了误区一的正确性,脑袋里是为什么、为什么。。。
当时就在想那么就让 j <= i 好了试一试
public class H_Z09 {
public static void main(String[] args) {
int i , j;
for( i = 101;i < 200 ; i++){
for(j = 2 ;j <= i ; j++){
if(i % j == 0){
break;
}else{
System.out.println(i+" "+j+" ");
}
}
/*if(i == j){
System.out.print(i+" ");
}*/
}
}
}
输出为:
101 2
101 3
101 4
101 5
101 6
...
199 195
199 196
199 197
199 198
依然是这样那好么,是我这个电脑有问题,换电脑试试,睡觉明天再说。但是H的贼心不死:
写下了这样的代码:
public class H_01 {
public static void main(String[] args) {
int j;
for(j = 0 ; j < 100 ; j++){
System.out.print(j+ " ");
}
System.out.println();
System.out.print(j+ " ");
}
}
输出:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
100
ok 基本功啊基本功成功的解释了三点:
1、j上面的代码中最后的值为199、在for循环内部执行最大的数为198而确实最后的j为199;
2、j == i 其实是为是j循环到i次都没有找到i的约数,j是次数,i是数值。
3、j < = i 这个也是成立的以为j 确实是个次数。达到了次数Z的代码就是有效的。
其实后来自己想用二维数组去解决这个问题!!