【问题标题】:Compile Errors Java: Boolean Array Method编译错误 Java:布尔数组方法
【发布时间】:2017-04-20 20:55:44
【问题描述】:

出现编译错误,无法让这段代码按我需要的方式工作,它开始让我发疯!基本上我试图让我的布尔数组在我的方法中遍历数组,找出是否更连续地列出了 False 或者如果 True 是并返回 true 或 false。在我的程序中,我列出的数组应该返回 false。有任何想法吗?提前致谢。

public class trueOrfalse
{
   public static void main(String [] args)
   {
      boolean[] guess = {false,true,false,false,false,true,true};
      boolean result = longerTF(guess);
   }


   public static boolean longerTF(boolean[] guess)
   {
   int variable = 0;
   for(int x = 0; x < guess.length; x++)
   {
       if(guess[x] > true)
       {
          return true;
       }
       else 
       {
           return false;
       }
   }
}

【问题讨论】:

  • 什么编译器错误?
  • 你应该修正你的缩进。
  • guess[x] &gt; true 应该是什么意思?
  • &gt; 仅适用于数字。而且你似乎不知道这个算法应该是什么样子。你肯定需要一个嵌套循环或其他方法。

标签: java arrays


【解决方案1】:

我不知道从哪里开始

首先这是错误的

if(guess[x] > true)

应该是

if(guess[x]==true)

因为 if 语句需要一个布尔结果,并且您的数组中有布尔值,所以这将具有相同的效果

if(guess[x])

您还错过了一个案例。当数组为空时,你永远不会遇到 for 循环,但你的方法仍然需要返回一个布尔值。您可以在方法结束时抛出运行时异常或 return false; 之类的默认值

您的 for 循环没有意义,因为您的方法将在第一次迭代中返回结果(如果数组不为空)。您的 longTF 方法也可能看起来像这样

public static boolean longerTF(boolean[] guess) {
    if(guess.length>0)
        return guess[0];
    throw new IllegalArgumentException("The array must not be empty");
}

我推荐一本像“编程:学习计算机编程语言基础”这样的通用书籍。在尝试实现任何东西之前,您需要先了解编程的基础知识。

【讨论】:

    【解决方案2】:

    比较运算符&gt; 等对于boolean 操作数既不合法也不有意义。你打算guess[x] &gt; true 完成什么?

    由于guessboolean[],因此您可以进行测试

    if (guess[x])
    

    if (! guess[x])
    

    return guess[x];
    

    编辑 您希望循环计算连续值。这个循环没有,但它显示了这种结构如何解决更简单的问题。

    public boolean dominant(boolean[] guess) {
      int tCount = 0;
      for (int ix = 0; ix < guess.length; ++ix) {
        if (guess[ix]) {
          ++tCount;
        }
      }
      return tCount >= guess.length / 2;
    }
    

    【讨论】:

      【解决方案3】:

      这是一个“更正”的版本:

      public class trueOrfalse {
          public static void main(String[] args) {
              boolean[] guess = { false, true, false, false, false, true, true };
      
              boolean result = longerTF(guess);
      
          }
      
          public static boolean longerTF(boolean[] guess) {
      
              int variable = 0;
      
              for (int x = 0; x < guess.length; x++) {
                  if (guess[x]) {
                      variable++;
                  }
              }
              return (variable > (guess.length-variable));
          }
      }
      

      您忘记了一个结束括号},返回语句和布尔比较不能与&lt;&gt; 一起使用。

      【讨论】:

      • 嗨,感谢您分享答案,我主要是试图让我的方法遍历传递的数组。查看布尔值并确定是否在数组中连续打印了 false 或者是否为 true。 False 连续打印更多,因此我希望我的方法将 false 返回到 main。
      • 循环在这段代码中没有意义,因为它会在第一次迭代后退出。还有if (guess[x] == true) {return true;},真的吗?测试 booleanboolean 以获得 boolean 以返回相同的 boolean 有点多余。
      • false 在数组中比 true 更连续地列出
      • @LewBloch 需要阅读我的帖子!我刚刚更正了它以通过编译器运行。该代码在语义上完全不正确。
      • @LewBloch 但你是对的......不能保持这样的答案。更改了代码以至少有点意义。
      【解决方案4】:

      正如上面每个人所提到的。您不能使用&gt; 来比较两个布尔值。

      为了计算连续真/假的数量,您需要两个不同的计数器。您可以运行一个循环并在遇到重复的真/假项目时不断增加计数器,如果不是,您可以将计数器重置为 1。我在下面提出了一个仓促的解决方案来给您一个想法。我没有很好地测试它似乎可以工作。希望这会有所帮助。

      public class trueOrfalse {
          public static void main(String[] args) {
              boolean[] guess = { false,true,false,false,false,true,true };
              boolean result = longerTF(guess);
              System.out.println("result: " +result);
          }
      
          public static boolean longerTF(boolean[] guess) {
      
              int consecutiveFalseCount = 1;
              int consecutiveTrueCount = 1;
      
              for (int x = 0; x < guess.length; x++) {
                  if (guess[x] == true) {
                      if(x!=0 && x<guess.length){
                         if(guess[x-1] == true){
                             consecutiveTrueCount = consecutiveTrueCount + 1;
                         } else {
                             consecutiveTrueCount = 1;
                         }
                      }
                  } else {
                      if(x!=0 && x<guess.length-1){
                             if(guess[x-1] == false){
                                 consecutiveFalseCount = consecutiveFalseCount + 1;
                             } else {
                                 consecutiveFalseCount = 1;
      
                             }
                          }
                      } 
              }
      
              System.out.println("Consecutive True count: " +consecutiveTrueCount);
              System.out.println("Consecutive False count: " +consecutiveFalseCount);
      
              if(consecutiveTrueCount>consecutiveFalseCount){
                  return true;
              } else {
                  return false;
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-13
        • 2012-04-18
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 2018-10-13
        • 1970-01-01
        相关资源
        最近更新 更多