JavaFX:缺少返回语句

时间:2017-04-24 22:20:28

标签: java netbeans javafx

我有以下代码执行以下操作: - 它需要一个温度和一个通道索引,并搜索一个对象列表(包含温度数组)并返回找到温度的对象的索引。 我希望这个方法在找到第一个时结束,因为这是达到温度的最早时间(已记录)

public int findRow(double targetTemperature, int ch)
{
    //This method takes a double and finds it in the List, it then returns the element in which it is (the row)
    //The element returned can be used with duration.between to find the response time between 2 known values
    for (int i=0; i < readings.size(); i++)
    {
            double compareTemp = readings.get(i).getValue(ch);
            if (compareTemp > targetTemperature)
            {
                System.out.println(readings.get(i).getTimestamp() + "is above target temp for channel " + ch);
                return i;
            }
            else
            {
                System.out.println(readings.get(i).getTimestamp() + "Is not above target temp for channel " + ch);
                return 0;
            }
    }
}

List包含TemperatureReadings,它是我创建的一个有两个变量的类:
- 值数组的双打
- 带有currentime的时间戳(创建数组时)
我正在尝试找到每个频道的响应时间。但是,当我运行上面的代码时,它表示“没有返回语句”,即使两个选项都有一个return语句(if / else)
或者,如果你能帮助我找到一个更好的方法来找到列表的第一次发生,那个通道中的温度(数组索引)达到X度,我真的很感激。

实际上我不希望它返回0如果可能的话返回错误或者说“没有找到温度”或类似的东西

3 个答案:

答案 0 :(得分:2)

因为你的if语句在你的循环中,如果你的循环没有运行会发生什么? ==&GT;意味着你没有退货声明! 从循环中添加一个return语句,虽然你知道它不能运行这个语句只是因为你确定循环会运行,但是编译器不知道

答案 1 :(得分:1)

Tuyen是对的。此外,您不需要else语句。您将在第一个项目后返回。你只需要第一个if,然后在循环外返回0;

尝试:

.*

答案 2 :(得分:1)

您的循环不正确:如果第一个元素不符合条件,则该方法将在else分支中返回,甚至不检查列表中的其他元素。

你可以删除else brach,并制定一个约定(和javadoc注释,如果没有找到具有指定条件的项目,则返回-1)...

public int findRow(double targetTemperature, int ch) {
    for (int i = 0; i < readings.size(); i++) {
        if (readings.get(i).getValue(ch) > targetTemperature)
            return i;
    }
    return -1;
}

...您可以根据来电方的返回值记录任何内容:

int channel = 2;
int ind = findRow(35, channel);
if (ind >= 0)
    System.out.println(readings.get(ind).getTimestamp() + " is above target temp for channel " + channel);
else
    System.out.println("Nothing has been found");

使用流:

public int findRow(double targetTemperature, int ch) {
    return IntStream.range(0, readings.size())
            .filter(i -> readings.get(i).getValue(ch) > targetTemperature)
            .findFirst()
            .orElse(-1);
}