【问题标题】:Incorrect logics不正确的逻辑
【发布时间】:2014-01-24 19:38:30
【问题描述】:

所以这个方法的重点是得到一个高于 100 的温度数组。这有什么问题?当我在我的 toString 中返回它时,它说 blazing[] 不存在。

public int[] above100Degrees()
   {
      int[] blazing = new int[temps.length];
      for( int i = 0; i < temps.length; i++ )
      {
         if( temps[i] > 100 )
         {
            blazing[i] = temps[i];
         }
      }
      return blazing;
   }

toString 方法:

 public String toString()
    {
      String returnString = "The temperature forecast of week " + WEEK + " is logged in as: ";
      for( int i = 0; i < temps.length; i++ )
      {
          returnString += "\t" + temps[i] + "\t";
      }
      returnString += "\n" + "The number of temperatures below freezing is " + getUnderFreeze() + "." + "\n" + 
                             "The largest difference this week was a net change of " + NetChange() + "."; 
      for( int i = 0; i < blazing.length; i++ )
      {
         returnString += "The temperature above 100 degrees is " + above100Degrees() + "." + "\n" + "\t" + blazing[i] + "\t";
      }
      return returnString;
    }

输出

Forecast.java:122: error: cannot find symbol
      for( int i = 0; i < blazing.length; i++ )
                          ^
  symbol:   variable blazing
  location: class Forecast
Forecast.java:124: error: cannot find symbol
         returnString += "The temperature above 100 degrees is " + above100Degrees() + "." + "\n" + "\t" + blazing[i] + "\t";
                                                                                                           ^
  symbol:   variable blazing
  location: class Forecast
2 errors

【问题讨论】:

  • 'toString' 方法中没有声明数组 'blazing',并且从 'above100Degrees' 方法返回的数组也没有保存在任何地方。
  • 好的,我要如何使用“炽热”的元素,我想展示它们
  • 看起来您的变量 blazing 不适用于您的 toString() 方法。从您上面发布的代码来看,blazing 似乎只属于above100degrees method。您可以将 blazing 设为类级别变量,以便在其他地方看到它
  • 我假设您对编程(或至少是 Java)很陌生。我认为您会从使用诸如 jetbrains.com/idea 之类的 IDE 中受益。它将为您突出显示这些类型的问题以及许多其他好处。
  • 您不能使用+ 将数组放入字符串中。请看Arrays.toString

标签: java arrays return logic


【解决方案1】:

数组由above100Degrees 方法返回。它不会在调用它的范围内建立变量名blazing。实际上,您可以将返回的数组分配给不同名称的变量。

试试

int[] reallyHot = above100Degrees();
// Then check reallyHot...
for( int i = 0; i < reallyHot.length; i++ )
{
     returnString += "The temperature above 100 degrees is " + reallyHot[i] + "." + "\n";
}

确保使用数组访问语法访问特定元素。

【讨论】:

    【解决方案2】:

    改变:

    for( int i = 0; i < blazing.length; i++ )
    {
        returnString += "The temperature above 100 degrees is " + above100Degrees() + "." + "\n" + "\t" + blazing[i] + "\t";
    }
    

    到:

    int[] blazing = above100Degrees();
    for( int i = 0; i < blazing.length; i++ )
    {
        returnString += "The temperature above 100 degrees is " + blazing[i] + "."; // personalise format
    }
    

    【讨论】:

    • 这个十六进制代码怎么办,它不显示数组的元素
    • 当你将'toString'方法的结果输出到Sysout时会显示什么?
    • 为什么一定要设置数组等于方法?
    • 因为方法 'above100Degrees()' 中的数组 'blazing' 在该方法之外不存在。要使用它,必须将它分配给另一个变量(在我的示例中,'toString' 方法中的变量'int[] blazing';在他的示例中,rgettman 将其称为'reallyHot')。如果你不分配它,它就会丢失。
    【解决方案3】:

    您的 above100Degrees() 函数返回数组,但您没有在 toString() 方法中调用该函数。就 toString() 而言,炽热不存在。

    从 toString() 中调用 above100Degrees() 并将结果数组保存到变量中。然后,您将能够迭代 (newVariable).length 而不是 blazing.length。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多