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

java雏鸟请教大神!有难度的题,都进来看看
问题所在: 在前三次我能输正确的话,调用isTrue()方法能够正常跳出循环
           但问题是我前三次输入错误,重新调用函数之后!即使输入正确也会出现isTrue()不能正常
           跳出循环,感觉是跳出了if() else
Test

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
UI u = new UI();
try {
u.isUser();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
         }


UI

public final class UI {
private  String nickName;
private  String passWord;


public void isUser() throws InterruptedException {
int count = 2; //计数器

this.info();          //打印标题
this.inputUserInfo(); //调用输入用户信息的方法

while(true){
if(this.isTrue()) { //登录成功  循环停止
print("Login Success");
break; 
} else {
if(count == 0) {      //当计数器等于0时,输出提示信息,倒计时,进行函数重新调用
print("当前用户已禁止登录!");
this.countDown(); //倒计时
this.isUser();    //进行函数重新调 用
/*if(this.isTrue()) { //这样子可以解决问题 但解决不了我的疑虑
break;
}*/

}else{
print("您输入的用户名或密码错误!当前可输入次数" + count--);//提示用户可输入的次数
print("请重新输入:"); //用户名或密码错误,提示用户重新输入
this.inputUserInfo();//再次调用输入用户信息的方法 循环继续
}
}

}
}

private void inputUserInfo() {
Scanner sca = new Scanner(System.in);
System.out.println("请输入你的用户名:");
nickName = sca.next();
System.out.println("请输入你的密码:");
passWord = sca.next();
}

private boolean isTrue() {
Users user = new Users();
if(this.nickName.equals(user.NICKNAME) && this.passWord.equals(user.PASSWORD))
return true;
return false;
}

private void countDown() throws InterruptedException {
int i =11;
while(i >= 0) {
Thread.currentThread().sleep(1000);
i--;
if(i > 0) {
print("倒计时:"+ i+"秒");
}
}
}

private void print(Object obj) {
System.out.println(obj);
}

private void info() {
print("*********传智播客登录平台********");
}
}


Users

public class Users {
public final String  NICKNAME = "admin";
public final String  PASSWORD = "admin";

}


------解决方案--------------------
不用怀疑break;会跳出循环的
你说的问题极有可能是你在isUser()里调用isUser()给你造成的错觉

你这个逻辑太混乱了
我觉得

int cnt = 0;
while(true){
    输入;
    判断;
    if(正确){
       提示登陆成功;
        break;
    }else{
       提示用户名密码错误;
       ++cnt;
    }
    if(cnt == 3){
       cnt = 0;
       等待10s;
    }
}

------解决方案--------------------
package cn.fengjia.test;

import java.util.Scanner;

public final class UI {
private  String nickName;
private  String passWord;

private boolean b=true;

public void isUser() throws InterruptedException {
int count = 2; //计数器

this.info();          //打印标题
this.inputUserInfo(); //调用输入用户信息的方法

while(b){
if(this.isTrue()) { //登录成功  循环停止
print("Login Success");
b=false;
break; 
} else {
if(count == 0) {      //当计数器等于0时,输出提示信息,倒计时,进行函数重新调用
print("当前用户已禁止登录!");
this.countDown(); //倒计时
this.isUser();    //进行函数重新调 用
/*if(this.isTrue()) { //这样子可以解决问题 但解决不了我的疑虑