我刚开始学习如何用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章)。
更新:非常感谢您的回复,大家好!我能够提出一个完全按照我的问题提出的解决方案。
答案 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));