日期:2014-05-20  浏览次数:20722 次

为什么数值出现了偏差?
原题为:用户登录系统时需要输入用户名和密码,系统对用户输入的用户名和密码进行验证。验证最多三次,超过三次则程序结束。根据验证结果的不同<strong>(信息匹配/信息不匹配/三次都不匹配)</strong>,执行不同的操作,假设正确的用户名和密码分别为:Jim和123456.
下面是分别用while,do-while,for循环写出来的源代码(我自认为的解释可能因循环结构不同,因此i的数值出现了偏差)【下面的代码能正常运行,但每个结构里面i的值会有偏差,各位高手,真的是因为循环结构不同,而数值出现了偏差,还是?】:
Java code

import java.util.*;
public class P137_3{
public static void main (String[]args){
Scanner input = new Scanner(System.in);
String id ;//录入ID
int press;//录入密码
for ( int i = 2; i&gt;=0; i-- ){//定义表达式
System.out.println("请输入用户名(for循环):");
id = input.next();//录入用户名
System.out.println("请输入密码:");
press = input.nextInt();//录入密码
if ("Jim".equals(id) &amp;&amp; press == 123456 ){//若输入正确,提示欢迎,并退出循环
System.out.println("欢迎登录Shopping系统!");
break;
}
else if ( !"Jim".equals(id) || press != 123456 ) {//录入错误,则提示错误,并提示剩余次数
System.out.println("输入错误!您还有"+i+"次输入机会!");
if ( i==0 ){//当i等于0时,提示3次输入均出错,并结束循环
System.out.println("******************");
System.out.println("对不起,您3次均输入错误!");
}
continue;
}
}
System.out.println("***********while循环开始*******");
int i = 3;
while ( i&gt;0 ){
System.out.println("请输入用户名(while循环):");
id = input.next();//录入用户名
System.out.println("请输入密码:");
press = input.nextInt();//录入密码
if ("Jim".equals(id) &amp;&amp; press == 123456 ){//若输入正确,提示欢迎,并退出循环
System.out.println("欢迎登录Shopping系统!");
break;
}
else if ( !"Jim".equals(id) || press != 123456 ) {//录入错误,则提示错误,并提示剩余次数
i = i-1;
System.out.println("输入错误!您还有"+i+"次输入机会!");
if ( i==0 ){//当i等于0时,提示3次输入均出错,并结束循环
System.out.println("******************");
System.out.println("对不起,您3次均输入错误!");
}
continue;
}
i--;
}
System.out.println("***********do-while循环开始*******");
do{System.out.println("请输入用户名(do-while循环):");
id = input.next();//录入用户名
System.out.println("请输入密码:");
press = input.nextInt();//录入密码
if ("Jim".equals(id) &amp;&amp; press == 123456 ){//若输入正确,提示欢迎,并退出循环
System.out.println("欢迎登录Shopping系统!");
break;
}
else if ( !"Jim".equals(id) || press != 123456 ) {//录入错误,则提示错误,并提示剩余次数
i = i-1;
System.out.println("输入错误!您还有"+i+"次输入机会!");
if ( i==0 ){//当i等于0时,提示3次输入均出错,并结束循环
System.out.println("******************");
System.out.println("对不起,您3次均输入错误!");
}
continue;
}
} while ( i &lt;= 3 &amp;&amp; i&gt;0 );
}
}


------解决方案--------------------
循环3次
(int i = 0;i< 3;i++){

}
int i = 0

while(i<3){
i++
}
int i = 0;

do{
i++
}while(i<=3);