0
    int menuoptions;
    String userinput;
    String usercheck="";
    String username="user";
    String password;
    int intCounter=0;

    con.println("TYPING GAME\n");
    con.println("1. Sign in");
    con.println("2. Create a new account");
    menuoptions = con.readInt();
    con.clear();

    if(menuoptions==1){
        while(!username.equals(usercheck) && intCounter==0){
            con.println("Please type in your username.");
            userinput = con.readLine();
            con.clear();
            TextInputFile infile = new TextInputFile("logins.txt");
            while(infile.eof() == false && intCounter==0){
                usercheck=infile.readLine();
                infile.readLine();
                    if(username.equals(usercheck)){
                    intCounter=intCounter+1;
                    }
            }

            if(!userinput.equals(usercheck) && intCounter==0){
                con.println("No such username.");
                pause(2000);
                con.clear();
            }       
            else if(userinput.equals(usercheck)){
                intCounter = intCounter+1;
            }
        }

        con.println("What is your password?");

    }

    if(menuoptions==2){
        con.println("What will be your username?");
        username = con.readLine();
        con.clear();
        con.println("What will be your password?");
        password = con.readLine();
        con.clear();
        TextOutputFile outfile = new TextOutputFile("logins.txt", true);
        outfile.println(username);
        outfile.println(password);
    }

}
public static void pause (int intMS){
    try{Thread.sleep(intMS);
}catch(InterruptedException y){}}

在 logins.txt 中,我在一行中有“voidturbulence”,在下一行中,我有“80”。当我输入“voidturbulence”时,它会跳转到“找不到用户名”,此时它应该要求输入密码。

但是,如果 userinput (voidturbulence) 等于 usercheck(第一行 [voidturbulence]),那么它不应该跳出循环并询问我的密码吗?

4

1 回答 1

0

A.代码

usercheck=infile.readLine();
infile.readLine();

在我看来很可疑。您可能有一个空行,一行包含用户名,以及由infile. 因此,usercheck可能永远不会收到您定位的用户名。(您从 . 中跳过每一行infile。)

B.代替

infile.eof() == false

利用

!infile.eof ()

为了更好的可读性。否则,

(((infile.eof() == false) == true) == true)

会被认为更具可读性,对吧?

C.代替

if (menuoptions == 1)
{
}
if (menuoptions == 2)
{
}

利用

if (menuoptions == 1)
{
}
else if (menuoptions == 2)
{
}

因为menuoptions当您刚刚发现它等于 1 时不能等于 2(并且在第一个 then 块中没有更改它)。

D. 有什么intCounter用?

  • 您将其初始化为 0。
  • 如果用户名等于 usercheck,则增加它。
  • 只要 username 不等于 usercheck 并且 intCounter 等于 0,while 循环就会循环。

username因此,如果equals ,这两个条件都将被满足usercheck

你可以消除intCounter.

这是一个坏变量名的好例子。" intCounter" 既不保证它是一个int,也不保证它包含任何东西的计数。您会发现,如果您尝试创建有用的名称,您将倾向于创建有用的代码。在您的示例中,您创建了一个无用的名称,以及操纵名称背后的值的无用代码,但实际上并没有完成任何事情。

E. 你想完成什么? 除了问题的标题外,没有任何规范说明您的代码试图涵盖的要求。最好指定你想要做什么,然后呈现代码,并指定你的问题。不要只是向我们抛出一些通用关键字,然后是代码。请 ;)

于 2012-12-04T16:01:09.473 回答