介意帮助一个碰到他们的第一个减速带的新人?

时间:2016-11-19 15:03:42

标签: java loops counter minimum

我刚开始学习如何用Java编程。到目前为止,一切都进展顺利。直到我遇到这个"奖金"问题/问题我们的老师让我们解决这个问题"挑战"。

Please click here to view the Question and the Sample input/output(它是图像文件)

请注意,我不允许使用课堂上没有教过或讨论的任何内容。因此,数组,方法重载,解析数组到方法,parseInt等等都被排除在外。

到目前为止,我能够提出的是:

import java.util.Scanner;
public class Test 
{
    public static void main(String[] args) 
    {
         int N; // number of lines of input
         double length1, length2, length3; // the 3 lengths
         double perimeter; // you get this by adding the 3 lengths
         double minperimeter=0; // dummy value

         Scanner input = new Scanner(System.in);
         System.out.println("Enter the number of triangles you have:");
         N = input.nextInt();

         System.out.println("Insert the lengths of the sides of these " +  
                            "triangles (3 real numbers per line):");

         for (int counter=0; counter<N; counter++)
         {
             length1 = input.nextDouble();
             length2 = input.nextDouble();
             length3 = input.nextDouble();

             perimeter = (length1 + length2 + length3);
             minperimeter = Math.min(perimeter,Math.min(perimeter,perimeter));
         }

         System.out.printf("The minimum perimeter is %.1f%n", minperimeter); 
    }
}

我的两个主要问题是

1)该程序仅存储和使用最后一个&#39;输入。 之前的那些用替换 [更新:解决了这个问题]

2)如何在最终输出中打印&#34;三角形数字&#34; [更新:解决了这个问题]

那么,任何人都可以帮我提出一个只需要基本的Java学习的解决方案吗?如果它有帮助,this is the book我们正在使用。目前在第4章。但我们确实学习了数学课(在第5章)。

更新:非常感谢您的回复,大家好!我能够提出一个完全按照我的问题提出的解决方案。

4 个答案:

答案 0 :(得分:3)

Math.min(perimeter,perimeter)将始终为您提供perimeter。您可能想要Math.min(perimeter,minPerimeter)

如果我不能为您提供第二个问题的完整解决方案,那么编程任务是最好的,但您的提示是在for循环的counter参数中。更新minperimeter时保存,以便您知道在哪个循环迭代中找到最小值。

此外,将minPerimeter初始化为10000或更高。如果从0开始,Math.Min将永远不会低于此值。

答案 1 :(得分:0)

将for循环更改为:

double minperimeter=-1;

for (int counter=0; counter<N; counter++)
     {
         length1 = input.nextDouble();
         length2 = input.nextDouble();
         length3 = input.nextDouble();

         perimeter = (length1 + length2 + length3);

         if(minperimeter == -1){
               minperimeter = perimeter;
         } else{
               Math.min(perimeter,minperimeter);
         }
     }

答案 2 :(得分:0)

您必须在变量perimeter中存储较小的边界。

你的任务提示告诉你,任何给定的周长都小于1000.因此,将周长设为1000.

在你的for循环中,你必须存储较小的边界:

perimeter = Math.min(perimeter, length1 + length2 + length3)

如果边的总和小于当前周长,则将存储较小的值。

请注意,根据您的给定任务,您必须在一行中输入3个双打。

答案 3 :(得分:0)

替代解决方案

创建一个ArrayList并将所有边界添加到该列表中,然后从该列表中找到最小值。

     List<Double> perimeter = new ArrayList<>();

     for (int counter=0; counter<N; counter++)
     {
         length1 = input.nextDouble();
         length2 = input.nextDouble();
         length3 = input.nextDouble();

         perimeter.add(length1 + length2 + length3);
     }

     System.out.printf("The minimum perimeter is %.1f%n", Collections.min(perimeter));