作为问题集的一部分,我必须按升序排列3个数字。一个简单的任务,但由于某种原因,我没有得到预期的结果。不允许使用数组。下面是我的代码我已经链接到我的流程图here。我无法让程序对3个数字进行排序,例如5,5和-4。当我尝试这种情况时,输出如下:
Enter three numbers.
标准-0.04 5.0标准5.0标准-0.04 5.0
如果我让它工作,我就不能让23,0,39的情况排序。我不确定我是否在这么多的情况下过度复杂化了;我觉得我的流程图涵盖了所有的可能性。提前感谢!
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.print("Enter three numbers.");
double x = reader.nextDouble();
double y = reader.nextDouble();
double z = reader.nextDouble();
if (x >= y){
if (y >= z)
System.out.print("In order " + z + " "+ y + " " + x);
if (z >= x)
System.out.print("In order " + y + " "+ x + " " + z);
if (x > z)
System.out.print("In order " + y + " " + z + " " + x);
}
if (y > x)
{
if (z >= y)
System.out.print("In order " + x + " " + y + " "+ z);
if (z >= x)
System.out.print("In order " + y + " " + x + " " + z);
if (x > z)
System.out.print("In order " + y + " " + z + " " + x);
}
}
}
6条答案
按热度按时间vawmfj5a1#
您可以使用
Math.max(double, double)
和Math.min(double, double)
以及基本的加法和减法来解决这个问题。比如使用
if
和else
比较而不是Math.max
和Math.min
比较稍微复杂一点。选择一个默认值并与其他两个值进行比较。比如x6492ojm2#
如果你想坚持使用if/else逻辑,这里对你原来的解决方案做了一个小小的修改。注意else if的用法。我已经注解掉了前面的代码行以供比较。
j0pj023g3#
您的
if/else
语句存在一些问题:1.使用else if语句,因为其中任何一个条件都为真,而不是全部,因此结果将被多次打印。
1.第二个if语句最后两个语句是错误的,因为如果我们输入if语句,那么
(x < y)
肯定是正确的,但是你在y
之前打印x
(现在编辑)。下面是正确的代码:
blpfk2vs4#
}
ghhaqwfi5#
我想对艾略特·弗里施最受欢迎的回答做一个更正。
首先需要检查这两个条件是否为真,这样我们就可以存储正确的“max”和“min”数字。因为在Elliot的答案中,这是不检查的,如果它们都是真的,“x”将始终是存储的数字,有时会给出给予不正确的输出。
希望它能有所帮助:)
您可以使用
Math.max(double, double)
和Math.min(double, double)
以及基本的加法和减法来解决这个问题。比如使用
if
和else
比较而不是Math.max
和Math.min
比较稍微复杂一点。选择一个默认值并与其他两个值进行比较。比如cwxwcias6#
DisplaySortedNumbers(x,y,z)
public static void println(int num1,num2,num3){
}