【问题标题】:Java boolean method with for loop带有 for 循环的 Java 布尔方法
【发布时间】:2017-09-12 03:15:51
【问题描述】:

嘿,我正在尝试在应该返回布尔值的方法中执行 for 循环。但是我不断收到错误消息。基本上数组可以变得非常大,我希望它可以检查整个数组以查找用户名和密码。

public class Users {
    private String username;
    private String password;
    private String[][] accounts = { { "user1", "pass1" }, { "user2", "pass2" } };

    public Users(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public boolean check() {

        for (int i = 0; i < accounts.length; i++) {
            if ((username.equals(accounts[i][0])) && (password.equals(accounts[i][1]))) 
                return true;
            else 
                return false;
        }
    }

}

【问题讨论】:

  • 您不会一直收到“错误”。您收到一个非常具体的错误。如果您对编程非常陌生,以至于您不理解该错误,并且您将其视为噪音,但这并不意味着这不重要。实际上,这是迄今为止最重要的事情。 发布。
  • 为了澄清,return 语句会立即脱离它们所在的方法,因此当 for 循环将 usernamepasswordaccounts 中的第一个 String[] 进行比较时,无论值是否相等,循环被打破,方法返回。
  • 实际上不,您甚至没有收到错误消息。您的代码无法按您预期的方式运行。
  • @MikeNakis 我相信这就是他们所说的“出错”的意思;他们的代码并没有提供他们想要的东西。
  • 更不用说使用并行数组了……

标签: java arrays for-loop boolean


【解决方案1】:
boolean method() { // please note: when this method is called

  int i; // it executes this line

    for(i=0; i<10; i++){  // then it executes this line
       // while this loop is executing it also executes return false statement
        if(i==8){
           return true;
        }
    }

     return false;// then it executes this line

//therefore the boolean value will be false. i mean the returned boolean value and //then it returns true;
}

如果我的理解有误,请澄清?

【讨论】:

    【解决方案2】:

    你的 for 循环应该是反向的,看看下面

    public class Users {
    private String username;
    private String password;
    private String[][] accounts = { { "user1", "pass1" }, { "user2", "pass2" } };
    
    public Users(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public boolean check() {
    
        for (int i = 0; i < accounts.length; i++) {
            if ((!username.equals(accounts[i][0]))||(password.equals(accounts[i][1]))) 
                return false;
    
        }
     return true;
    } 
    
    }
    

    好的,让我们谈谈为什么? 你说过有时候你会有一个很大的数组,所以如果一个出错了,不需要继续循环,如果有错误的数据它会立即返回 false,否则它会返回 true;

    更新 如果你的循环和你所做的一样,你正在检查第一个结果是否正确 这就是我反转循环的原因

    【讨论】:

    • 您将return true; 放在check() 方法之外。这在语法上是不正确的。
    【解决方案3】:

    如果accounts 数组中的第一个条目与usernamepassword 不匹配,则当前返回false

    如果要检查所有帐户,则应仅在循环完成后返回false

    public boolean check() {
        for (int i = 0; i < accounts.length; i++) {
            if ((username.equals(accounts[i][0])) && (password.equals(accounts[i][1]))) 
                return true;
        }
        return false;
    }
    

    【讨论】:

    • 在这种情况下,如果第一个结果是正确的,它将返回true,而不检查其他数据\
    • @BasilBattikhi 我相信这是必需的行为。一旦找到匹配项,就无需检查数组的其余部分。如果您要求数组的所有元素都匹配,则要求数组的所有元素都相同,这意味着您根本不需要数组。
    • 这取决于要求所以我们俩都有正确的答案
    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2023-03-13
    • 1970-01-01
    • 2019-07-15
    • 2012-10-09
    相关资源
    最近更新 更多