【问题标题】:Java, repeat If statement if the condition was falseJava,如果条件为假,则重复 If 语句
【发布时间】:2015-08-20 11:04:48
【问题描述】:

简单来说,我基本上有一个这样的if语句:

if(A[random]==1)
    A[random]=0;
else 
    continue;

现在我知道“继续”是循环语句,这不起作用,但我想要在 else 之后的一些东西,如果确实激活了 else(基本上条件为假),它重复第一个 if(A[ random]==1) 语句。

【问题讨论】:

  • 你在找while(!condition)吗?
  • 这个的终止条件是什么?它应该在A[random] == 1 之后终止吗?
  • 是的,当它在数组中找到一个位为 1 并且将其更改为 0 后,if 应该停止。并且使用 while 语句,如果它找到一个为 0 的位,它将停止并且不会改变任何内容
  • 迭代 101 - 在线提问前请尝试学习基本编码
  • 如果数组没有位 =1,我认为任何解决方案都不起作用。如果我错了,请纠正我。

标签: java arrays if-statement


【解决方案1】:

您可以改用while 语句:

while (A[random] != 1) {
    A[random] = 0;
    // generate a new random...
}

【讨论】:

  • 我对这种方法的问题是我希望它只将数组中的一位从 1 更改为 0,如果随机选择的位为 0,它不会改变任何内容
  • @Mureinik OP 的代码应在满足 A[random]==1 时停止。您的代码正在执行相反的操作。而应该是 A[random]!=1。
  • @aa1992 确实如此。得到== 而不是!=。固定。
  • @Mureinik A[random]=0 应该在 while 循环之外。否则它会更改 OP 不想要的数组中的所有数字
【解决方案2】:

你可以试试下面的递归代码,看看这个解析是否是你的查询

public class Test {


 public void continueIf(){
    if(A[random]==1)
        A[random]=0;
    else {
        continueIf();
    }
 }

 public static void main(String[] args) {
    new Test().continueIf();
 }
}

请注意,如果条件不满足,则会导致stackoverflowerror。这也取决于JVM内存的大小。查看 link 了解有关 stackoverflow 错误的更多详细信息。

【讨论】:

  • 如果我错了请纠正我,但这种方法会导致StackOverflowException。它需要一个return;,即使这样,逻辑也是错误的。
  • 我测试了它并且它工作了这是我想要的结果,谢谢 pise
  • @MirandaCode 正如@drewkennedy 所说,如果您的 if 条件不满足,那么它可能会导致 java.lang.StackoverflowError
  • 好吧,我已经运行了代码的各种迭代,但它还没有出现 StackOverflowException,太好了!
  • @MirandaCode 我认为 pise 和 Drew Kennedy 是对的。您是否检查了数组中没有位 =1 的代码。
【解决方案3】:

if/Else 语句在遍历数组时无法单独工作。我建议将它放在 For 循环或 While 循环中。循环将搜索数组,if/else 语句将检查索引中提供的条件。我也会摆脱其他的。你真的不需要那个部分,只需要 if。

最基本的例子中的for循环看起来像这样:

    for(var i = 0; i < SIZE; i++)
        {
           if (A[i] == 1)
                 A[i] = 0;
        }

SIZE 是数组的大小

【讨论】:

  • 我需要它从 A 数组中随机选择一个值....考虑到这一点,我无法在 for 循环中实现它并拥有 A[i],这有点违背了目的
【解决方案4】:
random = ...;  // get first random number
while (A[random] != 1) {
    random = ...; // get new random number
}
A[random] = 0;  // now is 1, switch it to 0

【讨论】:

    【解决方案5】:

    这应该可行。其他答案已经描述了 while 和递归,所以我是 还添加了一个 do while 循环。

     do{
        //generate the  random number
        }while(A[random]!=1)//The loop iterates till the condition A[random]!=1 is satisfied
        A[random]==0;//changing the bit to 0
    

    请注意,如果数组中没有bit =1,则此解决方案将失败,因为您正在随机生成索引。 因此,如果数组没有element =1,那么它会不断重复检查索引并生成infinite loop

    希望对您有所帮助。祝您编码愉快!!

    【讨论】:

    • 虽然这是正确的,但这个答案将通过解释为什么 do...while 循环可以解决 OP 的问题而不是只包含代码 sn-p 来受益。
    • @JNYRanger 添加了解释。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多