public class OutThree{
public static void main(String[] args){
int [] a=new int[500];
for(int i=0;i<500;i++){
a[i]=1;
}
int count=0;
int max=0;
int i=0;
while(max<a.length-1){
if(a[i]==1){
count++;
if(count%3==0){
a[i]=0;
max++;
count=0;
}
}
i++;
if(i==a.length){
i=0;
}
}
for(i=0;i<a.length;i++){
if(a[i]==1){
System.out.println(i);
break;
}
}
}
}
以上是小弟练习时候打的一段代码。现在是正确的。
但开始得时候小弟打到while语句时候是这样写的:
while(max<a.length-1){
if(a[i]==1){
count++;
} //这个括号是我本来写得位置,下面注释掉得括号是正确时候的位置
if(count%3==0){
a[i]=0;
max++;
count=0;
}
//}
i++;
if(i==a.length){
i=0;
}
}
本来就是一个隔3去值得一个运算,想不明白这个括号位置有这么大影响。不是都是2个if判断而已吗?
public static void main(String[] args){
int [] a=new int[500];
for(int i=0;i<500;i++){
a[i]=1;
}
int count=0;
int max=0;
int i=0;
while(max<a.length-1){
if(a[i]==1){
count++;
if(count%3==0){
a[i]=0;
max++;
count=0;
}
}
i++;
if(i==a.length){
i=0;
}
}
for(i=0;i<a.length;i++){
if(a[i]==1){
System.out.println(i);
break;
}
}
}
}
以上是小弟练习时候打的一段代码。现在是正确的。
但开始得时候小弟打到while语句时候是这样写的:
while(max<a.length-1){
if(a[i]==1){
count++;
} //这个括号是我本来写得位置,下面注释掉得括号是正确时候的位置
if(count%3==0){
a[i]=0;
max++;
count=0;
}
//}
i++;
if(i==a.length){
i=0;
}
}
本来就是一个隔3去值得一个运算,想不明白这个括号位置有这么大影响。不是都是2个if判断而已吗?
while(max <a.length-1){
if(a[i]==1){
count++;
} //这个括号是我本来写得位置,下面注释掉得括号是正确时候的位置
if(count%3==0){
a[i]=0;
max++;
count=0;
}
//}
i++;
if(i==a.length){
i=0;
}
} 你写的那个括号使这2个if判断独立了 而正确的意思是说 要满足了前面这个IF再去判断是否满足下面一个IF
{
public static void main(String[] args)
{
int[] a = new int[500];
for (int i = 0; i < 500; i++)
{
a[i] = 1;// 数组的内容都是 1
}
int count = 0;
int max = 0;
int i = 0;
/**
* while (max < 499)//a.length 可以直接写500 因为你开始设置了。 {
* System.out.println(max); if (a[i] == 1)//永远为真 { count++;
* System.out.println("true"); if (count % 3 == 0) { a[i] =
* 0;//修改数组内容在count%3==0 max++; count = 0; } } i++; if (i == 500) { i =
* 0; } }
*/ while (max < a.length - 1)
{
if (a[i] == 1)
{
count++;
} // 这个括号是我本来写得位置,下面注释掉得括号是正确时候的位置
if (count % 3 == 0)
{
a[i] = 0;
max++;
count = 0;
}
// }
i++;
if (i == a.length)
{
i = 0;
}
} for (i = 0; i < 500; i++)
{
if (a[i] == 1)
{
System.out.println(i);
break;
}
}
}
}运行结果是:1
{
public static void main(String[] args)
{
int[] a = new int[500];
for (int i = 0; i < 500; i++)
{
a[i] = 1;// 数组的内容都是 1
}
int count = 0;
int max = 0;
int i = 0; // while (max < 499)// a.length 可以直接写500 因为你开始设置了。
// {
// System.out.println(max);
// if (a[i] == 1)// 永远为真
// {
// count++;
// System.out.println("true");
// if (count % 3 == 0)
// {
// a[i] = 0;// 修改数组内容在
// max++;
// count = 0;
// }
// }
// i++;
// if (i == 500)
// {
// i = 0;
// }
// } while (max < a.length - 1)
{//1
if (a[i] == 1)
{
count++;
} // 这个括号是我本来写得位置,下面注释掉得括号是正确时候的位置
//你写在这里 就是 while的1位置对应介绍了。和位置2的是并列的判断条件,如果注释后,2位置的判断就是嵌套的
if (count % 3 == 0)//2
{
a[i] = 0;
max++;
}
count = 0;
}
// }
i++;
if (i == a.length)
{
i = 0;
} for (i = 0; i < 500; i++)
{
if (a[i] == 1)
{
System.out.println(i);
break;
}
}
}
}
这个程序基本思路是一个有500个元素得array,所有元素得值都是1
当我数到第3个元素就将其值该为0。 于此同时我还定义了只有读取元素值为1得时候才会算是读取了一个元素。也就是隔3去除一个元素。
现在没嵌套得环境下,我先判断是否fi(a[i]=1){count++};也就是判断是否算是读取了一个元素。
然后才是下一个判断if(count%3==0),如果是得话那么这个a[i]就必定值是1,所以该为0;而在嵌套得环境下就是直接判断它是不是一个值为1得元素。如果不是的话 就直接跳出去,连if(count%3==0)也可以直接略过去了。这2个方法的确是有区别得。但是认真想下,非嵌套环境下如果fi(a[i]=1){count++};不成立,那么count 得值是不会改变得 if (count % 3 == 0)
// {
// a[i] = 0;// 修改数组内容在
// max++;
// count = 0;
// }
count的值也不会变化,那么count%3如何能等于0;写到这里我发现你帮我该了下 把count写在这个if语句得外面。 但是你看 每次while执行得时候都要把count 归0,这个有什么意义?初衷都改变了啊
我开始觉的他没回答到重点。
但是我一试验吃惊了。
用我本来错误得非嵌套格式 就该成count==3 结果居然正确了。 我很疑惑
if(count%3==3)这个地方就是错得关键
0%3==0;
1%3==1;
2%3==2;
3%3==0;因为还有一个count==0的时候存在
所以当count==0||count==3得时候都会执行下面那个if语句;
所以当if(count%3==3)的时候一定要用嵌套避免count==0的时候还运行下面一个if语句。
if(i==a.length){
i=0;
}产生效果,再进入while循环,两个if是嵌套,还是并列,还能一样吗?当
if(i==a.length){
i=0;
}没产生效果时,也就是没执行时,当然如您老人家所说,是否嵌套并不影响结果,可是当max还没加到a.length-1时,i已经==a.length了,i清0,再从a数组第0个元素循环,这时这个a数组里还全是1吗?
if(a[i]=1)还能是永远为true吗?这时嵌套判断与并列判断还能一样吗?