2013-02-21 80 views
0

我目前有一个问题,我的程序不能正常循环,请帮助我吧。代码如下。提前致谢!循环不能正常工作

import java.util.Scanner; 
import javax.swing.JOptionPane; 
import javax.swing.*; 
public class Wewe{ 
    public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(user!="admin" && pass!="admin"){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain = true); 
     } 
    } 

我希望发生的是,一旦用户输入错误的用户名或密码的程序将随后循环。但是,如果用户输入了正确的用户名或密码,它将不会循环询问用户是否正确。

+12

我认为你应该把'tryAgain = true'改成'tryAgain == true'? – CAMOBAP 2013-02-21 09:56:21

+1

为什么你正确使用'equals()'比较字符串,然后四行后'!='? – 2013-02-21 09:57:12

+0

他保持新鲜? – pandorym 2013-02-21 10:00:55

回答

4

试试这样说:

public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain = true; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; 
     } 
     if(!user.equals("admin") || !(pass.equals("admin")){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; 
    } 
}while(tryAgain); 
     } 
    } 
+3

'if(!user.equals(“admin”)&&!(pass.equals(“admin”))' 我想应该有OR运算符 – FazoM 2013-02-21 10:03:12

+0

@fazomisiek是的,当然你是对的,改变了它 – 2013-02-21 10:05:43

+0

有一个错误先生它说变量tryAgain可能没有初始化 – 2013-02-21 10:21:52

2

while(tryAgain == true)变化=到==

=是用于分配值。

==是用于检查条件。

您也可以使用。

while(tryAgain) 
3

变化

if(user!="admin" && pass!="admin")if(user!="admin" || pass!="admin")

如果你婉检查无效的用户名密码

1

设置tryAgain为false成功后,打破循环。在检查用户是否成功登录后跳过对无效用户的检查后,还要使用else if。另外如其他人提到String对象的比较应该使用equals方法。最后,while循环应该使用比较运算符==而不是赋值运算符=

public static void main(String[] args) { 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do { 
      System.out.print("\nInput username: "); 
      String user = inp.nextLine(); 
      System.out.print("\nInput password: "); 
      String pass = inp.nextLine(); 
      if (user.equals("admin") && pass.equals("admin")) { 
       System.out.print("Success!"); 
       tryAgain = false; //Changed to false to break loop 
      }else if (!user.equals("admin") && !pass.equals("admin")) { 
          //^Using equals instead of ==, added else if 
       JOptionPane.showMessageDialog(null, 
         "Try again! Invalid username or password!", 
         "Error Logging-In", JOptionPane.ERROR_MESSAGE); 
       tryAgain = false; 
      } 
     } while (tryAgain == true); //using == instead of = 
    } 
1

试试这个:

public class Wewe{ 
    public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain = true; 
     do{ 
      System.out.print("\nInput username: "); 
      String user = inp.nextLine(); 
      System.out.print("\nInput password: "); 
      String pass = inp.nextLine(); 
      if(user.equals("admin") && pass.equals("admin")){ 
       System.out.print("Success!"); 
       tryAgain = false; 
      } 
      if(user!="admin" && pass!="admin"){ 
       JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
       tryAgain = true; 
      } 
     } while(tryAgain); 
    } 
} 
0

有在你的代码夫妇的错误:

if(user!="admin" && pass!="admin"){ .... tryAgain = false; 

应该是:

if(user!="admin" || pass!="admin"){ .... tryAgain = true; 

然后:

System.out.print("Success!"); 
      tryAgain = true; 

应该是:

System.out.print("Success!"); 
      tryAgain = false; 

最后:

while(tryAgain = true); 

应该是:

while(tryAgain == true); 

或只是while(tryAgain);

希望有所帮助!

0

使用等于,而不是==

Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(!"admin".equals(user) && !"admin".equals(pass)){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain = true); 
+0

'tryAgain == true'真的需要吗?或者“while(tryAgain)”就足够了 – asifsid88 2013-02-21 10:04:28

2

这就赋予truetryAgain(这将始终评估为true,创造了一个无限循环):

} while(tryAgain = true) 

所以应该是:

} while(tryAgain == true) 

但是,通过遵循良好的编码风格可以避免整个问题;它应该是简单的:

} while(tryAgain) 

决不比较一个布尔变量和布尔常量,只需使用booleanVar!booleanVar为您的病情

0

为什么不用别的,也TRYAGAIN被错误地喜欢使用这

if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; //why repeat again 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; //ask again 
    } 

它也可以对子级

while(tryAgain) 
0

请检查以下解决方案。

public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
    if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = true; 
     } 
     if(!user.equals("admin") || !pass.equals("admin")){ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false; 
    } 
}while(tryAgain); 
     } 
} 

您正在比较两个字符串对象与!=。那是错的。在您的文章

问题行是: 如果(用户= “管理员” & &通= “admin” 的!){

0
import java.util.Scanner; 
import javax.swing.JOptionPane; 
import javax.swing.*; 
public class Wewe 
{ 
    public static void main(String[]args) 
    { 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain; 
     do 
     { 
      System.out.print("\nInput username: "); 
      String user = inp.nextLine(); 
      System.out.print("\nInput password: "); 
      String pass = inp.nextLine(); 
      if(user.equals("admin") && pass.equals("admin")) 
      { 
       System.out.print("Success!"); 
       tryAgain = false; 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
       tryAgain = true; 
      } 
     } while(tryAgain == true); 
    } 
} 

已经有若干所做的更改。

首先,你的代码已经被正确缩进了 - 这对任何想要帮助的人来说都容易得多!

其次,你不需要有两个if语句。你可以有一个if-else语句,因为你想这样做:“如果用户有正确的名称和密码,那么执行此操作,如果用户没有正确的名称和密码,请执行此操作。”可以缩写为“如果用户有正确的名称和密码,请执行此操作,如果不是,请执行此操作。”

第三,当tryAgain为true时,您的do-while循环将继续,所以您需要while(tryAgain == true),因为两个等号用于比较,而一个不是用于比较。

第四,循环继续,而tryAgain为true,所以你希望tryAgain为true,如果他们输入无效的用户名或密码,继续循环,如果他们输入正确的,停止循环为false。

此外,不使用==来比较字符串。 ==检查两个对象是否相同,所以用户永远不会==“admin”。相反,使用equals()方法来比较字符串。

0
public static void main(String[] args) { 
    Scanner inp = new Scanner(System.in); 
    boolean tryAgain = false; 

    do { 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
     if (user.equals("admin") && pass.equals("admin")) { 
      System.out.print("Success!"); 
      tryAgain = true; 
      inp.close(); 
     } else { 
      JOptionPane.showMessageDialog(null, 
        "Try again! Invalid username or password!", 
        "Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     } 
    } while (tryAgain == false); 
} 
+0

也关闭扫描器inp.close() – shamik 2013-02-21 10:12:54

0

如果我理解你的愿望出来的代码,有几个严重的错误:

首先,如果用户名和密码“admin”是正确的,你要结束的循环中,代码应该是:

System.out.print("Success!"); 
     tryAgain = false; 

不是:

System.out.print("Success!"); 
      tryAgain = true; 

设置TRYAGAIN为false意味着(如您变量(和后面的代码)被写入)程序将不会再次尝试用户名和密码(循环将停止循环)。

此外,你必须在下面的语句相同的差异:

if(user!="admin" && pass!="admin"){ 
      ... 
     tryAgain = false; 

TRYAGAIN应设置为真在这里,只要你想进行编程,以“重试”为输入名称和密码(tryAgain = true )。

最后,最重要的是,你的循环while命令实际上并没有做任何事情。这:

while(tryAgain = true); 

正在定义一个变量,而不是从它读取信息。你必须写:

while(tryAgain == true); 

如果你想检查tryAgain是否设置为true。

除了所有的是,这里还有一些不好的编码风格选择:

  • 有两个独立的if语句,其中一个会工作
  • 使用“!=”考虑串
  • 有任何时'=' 当考虑一个布尔

你两个if语句可以合并成:

if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; 
} 
else{ 
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; 
} 

由于只有一种方法可以成功,所以没有理由不把所有其他的东西都包含到else子句中。

,并在结束while语句可以简单地写为:

while(tryAgain) 

,虽然TRYAGAIN是真的,这将循环。

这里的另一个问题是,如果用户只是点击输入并且传递读为空字符串。当程序尝试将字符串与“admin”进行比较时,它将返回一个异常。我会添加一个初始值:

if(user.isEmpty() || pass.isEmpty()){ 
JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = false 
} 

到if语句。

这里是什么,我会用代码来执行:

import java.util.Scanner; 
import javax.swing.JOptionPane; 
import javax.swing.*; 
public class Wewe{ 
    public static void main(String[]args){ 
     Scanner inp = new Scanner(System.in); 
     boolean tryAgain = true; 
     do{ 
     System.out.print("\nInput username: "); 
     String user = inp.nextLine(); 
     System.out.print("\nInput password: "); 
     String pass = inp.nextLine(); 
if(user.isEmpty() || pass.isEmpty()){ 
    JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
      tryAgain = false 
    } 
    else if(user.equals("admin") && pass.equals("admin")){ 
      System.out.print("Success!"); 
      tryAgain = false; 
     } 
     else{ 
      JOptionPane.showMessageDialog(null, "Try again! Invalid username or password!","Error Logging-In", JOptionPane.ERROR_MESSAGE); 
     tryAgain = true; 
    } 
}while(tryAgain); 
     } 
    } 

我当然希望可以帮助,我能够理清一些混乱!