【问题标题】:Statement in 'else' is getting printed multiple times but I want it to print only once when 'if' is wrong'else' 中的语句被打印多次,但我希望它在 'if' 错误时只打印一次
【发布时间】:2018-08-08 17:48:13
【问题描述】:

在这里,我正在比较一组用户 ID 和密码的数组元素。 当if 条件错误时,我希望else 语句只打印一次。

我可以为它取任何其他变量吗?或者有人可以建议我是否可以在任何地方使用break 声明。

      public static void main(String args[])
       {
        lib1 o=new lib1();
        Scanner in=new Scanner(System.in);
        Scanner sc=new Scanner(System.in);
        int u[]={51,52,53,54,55};
        int p[]={1,2,3,4,5};
        int d=0;
        System.out.println("enter username and password");
        int un=in.nextInt();
        int pw=in.nextInt();

        for(int i=0,j=0;i<5 && j<5;i++,j++)
        {
            if(un==u[i] && pw==p[j])
            {
                while(d==0)
                {
                    System.out.println("enter subject name");
                    String c=sc.nextLine(); 
                    if(c.equals("java"))
                    o.java();
                    else if(c.equals("exit"))
                    {
                        d++;
                    }
                }
            }

            else
            {   
                System.out.println("invalid password"); 
            }   
        }
    }

【问题讨论】:

  • 为了清楚起见,您希望在运行时退出哪个else 块?如果它是while 循环中的else,那么您将需要另一个break 才能退出for 循环。

标签: java for-loop if-statement while-loop java.util.scanner


【解决方案1】:

else 块的末尾添加一个break。这将允许您立即退出 for 循环。

【讨论】:

  • 但是先生,它会在 if(un==u[0] && pw==p[0]) 为假之后退出循环但是如果 if(un==u[1] && pw==p[1]) 为真。
【解决方案2】:
Add if statement in end as shown in bold in code below.

public static void main(String args[])
           {
            lib1 o=new lib1();
            Scanner in=new Scanner(System.in);
            Scanner sc=new Scanner(System.in);
            int u[]={51,52,53,54,55};
            int p[]={1,2,3,4,5};
            int d=0;
            System.out.println("enter username and password");
            int un=in.nextInt();
            int pw=in.nextInt();

            for(int i=0,j=0;i<5 && j<5;i++,j++)
            {
                if(un==u[i] && pw==p[j])
                {
                    while(d==0)
                    {
                        System.out.println("enter subject name");
                        String c=sc.nextLine(); 
                        if(c.equals("java"))
                        o.java();
                        else if(c.equals("exit"))
                        {
                            d++;
                        }
                    }
                }   
            }
            **if(d == 0) {
                System.out.println("invalid password");
            }**
        }

【讨论】:

    【解决方案3】:
      public static void main(String args[])
       {
        lib1 o=new lib1();
        Scanner in=new Scanner(System.in);
        Scanner sc=new Scanner(System.in);
        int u[]={51,52,53,54,55};
        int p[]={1,2,3,4,5};
        int d=0;
        System.out.println("enter username and password");
        int un=in.nextInt();
        int pw=in.nextInt();
    
        for(int i=0,j=0;i<5 && j<5;i++,j++)
        {
            if(un==u[i] && pw==p[j])
            {
                while(d==0)
                {
                    System.out.println("enter subject name");
                    String c=sc.nextLine(); 
                    if(c.equals("java"))
                    o.java();
                    else if(c.equals("exit"))
                    {
                        d++;
                    }
                }
            }
    
            else
            {   
                System.out.println("invalid password"); 
                break;
            }   
        }
    }
    

    这是解决您问题的快速方法,但您也可以有其他实现方式

    【讨论】:

    • 先生已经试过了,但是即使IF为真,它也会打印else语句。
    【解决方案4】:

    您可以将break 语句放在循环中您希望立即退出循环的任何位置。这意味着你可以把它放在你的else 块,或者你的if 块,或者任何你需要突破的地方。在嵌套循环中,break 语句只会从调用它的直接循环中中断。

    另外,在您的代码中,您创建了两个使用System.in 作为输入源的Scanner 对象。不建议这样做,因为如果一个Scanner 被关闭,另一个也将被关闭。相反,只创建一个 Scanner 对象并仅在您完全完成后关闭它。

    【讨论】:

    • 是否可以一次仅通过一个 Scanner 接受 String 和 Int 这两种类型的输入?
    • @Deeptank 您可以从一个Scanner 对象中同时获得Strings 和ints。这意味着您可以调用scanner.nextInt(),或scanner.nextLine() 等,都使用相同的Scanner
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多