【问题标题】:How to print the lowest value in an arrayList using OOP?如何使用 OOP 打印 arrayList 中的最小值?
【发布时间】:2017-06-16 09:10:52
【问题描述】:

我希望获得最短的运行时间,但它打印了 arrayList 中的最后一个主条目。我正在尝试为狗打印一门特定的课程,并且在我输入课程代码时有效。但是,最低运行时间似乎不起作用。

示例数据

拉兹洛 12.2

凛 34.2

Yu 23.3 - 当 Lazlo 应该是获胜的狗时,这将被打印为获胜的狗。

获胜的狗应该有最短的运行时间,但它会取而代之的是读取最后一行并打印它。

private void winningDog(String dogsCode) 
{
    double runTime = 300;
    String winningDog = "";
    double winningTime = 0;
    for (Dogs dog: dogsList)
    {
        if(runTime > dog.getTotalTime() && (dog.getCourseCode().equalsIgnoreCase(dogsCode)))
        {
            winningTime = dog.getTotalTime();
            winningDog = dog.getName();
        }

    }
    System.out.printf("%n%s%17s%20s%1.2f%n", 
          "Winning dog", winningDog,"Time " , winningTime);

}

【问题讨论】:

  • 嗨!欢迎来到堆栈溢出!在您的编程之旅中,您会发现调试是一项非常有价值的技能。一开始,打印出变量真的很有帮助。我的提示是在 for 循环的开头打印变量。

标签: java loops oop arraylist


【解决方案1】:

假设dog.getTotalTime() 没有负值,您可以更改代码

winningTime = Double.MAX_VALUE; //assigning MAX value to ensure the condition is met at least once(unless all your time values are MAX_VALUE)

然后将您的条件更新为

if(runTime > dog.getTotalTime()..

if(winningTime > dog.getTotalTime().. // this would compare winningTime and you're setting the same is the condition matches

【讨论】:

  • 谢谢!我以前从未使用过此代码,但它解决了我的问题:)。非常感谢。
  • @NicoRobin 欢迎。如果这可行,请接受它作为答案。
【解决方案2】:

您要做的基本上是找到某个对象的最小场。您可以使用新的 Java 8 Stream API 在一行中完成此操作。

Dogs winningDog = dogsList.stream().min(Comparator.comparingInt(Dogs::getTotalTime)).get();

你的班级Dogs 应该是Dog。我只是根据您的增强型 for 循环做出回应,上面写着 Dogs dog: dogsList

通过在.stream().min() 之间添加.filter( CONDITIONS ),您可以轻松地将for 循环中的过滤器链接到调用中。

【讨论】:

  • 我会使用Collections.min()
  • Comparator.comparingDouble() 用于时间比较。
  • @shmosel 使用此代码似乎并不喜欢它。我之前尝试过 Collections.sort,但即使导入了包,它也会给我一个错误。
【解决方案3】:
private void winningDog(String dogsCode) {
    String winningDog = "";
    double winningTime = 0;
    if (dogsList != null) {
        winningTime = dogsList.get(0).getTotalTime();
        winningDog = dogsList.get(0).getName();
        if (dogsList.size() > 1) {
            for (int i = 1; i < dogsList.size(); i++) {
                if (dogsList.get(i).getTotalTime()< winningTime
                        &&  (dogsList.get(i).getCourseCode().equalsIgnoreCase(dogsCode))) {
                    winningTime = dogsList.get(i).getTotalTime();
                    winningDog = dogsList.get(i).getName();
                }

            }
        }
    }
    System.out.printf("%n%s%17s%20s%1.2f%n", "Winning dog", winningDog, "Time ", winningTime);
}

【讨论】:

  • 我做到了。它打印的是最高值而不是最低值。
  • @Hiccup if 中的比较器符号似乎是错误的。必须是&gt;
猜你喜欢
  • 2015-02-20
  • 2022-11-18
  • 1970-01-01
  • 2020-09-19
  • 2012-12-15
  • 2021-07-09
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多