数组中的Groovy最大值

时间:2018-12-13 10:12:23

标签: java groovy

此代码的目标是简单地找到列表a中的最大值,并将其乘以1.5 第一个输入确定用户输入的数字量。 第二个输入是一个双精度数字。 我已经使用数组来收集我的数字并从中找到最大值。

我写了下面的代码,但是没有得到正确的最大值。 您能告诉我我要去哪里了吗?如果我没有遵循正确的编码方式(因为我还很陌生),也请发表评论。

我的数据是

10
750.55
1555.99
524.12
5268.00
789.4569  // program shows this a max value
1245.78
124.556
175.56
1796.46
7564.994

下面是我的代码:

class Main {
    static void main(String[] args) {
        Scanner sc = new Scanner(System.in)
        def NoofTrans = Integer.parseInt(sc.nextLine())
        def Transamt = [NoofTrans]
        for (int i = 0; i < NoofTrans; i++) {

            Transamt[i]=sc.nextLine()
        }

        def Creditlimit
        println Transamt.max()

        Creditlimit=Transamt.max().toDouble()
        def Creditlimit1=(Creditlimit*5)
        println Creditlimit1
        println Creditlimit1.round(2)
    }
}

我的输出低于

789.4569
1184.19

应该是

7564.994
11347.49

1 个答案:

答案 0 :(得分:0)

有两个问题:

1-您在同一列表中混合了数字和字符串。因此,您找到的最大值未使用数值比较。您需要使用nextDouble()的扫描仪给您一个号码:

Transamt[i] = sc.nextDouble();

2-您的代码将max乘以5,而您想将其乘以1.5。这只是产生了意外的结果。

这是完整的代码:

class MainGroovy {
    static void main(String[] args) {
        Scanner sc = new Scanner(System.in)
        def NoofTrans = Integer.parseInt(sc.nextLine())
        def Transamt = [NoofTrans]

        for (int i = 0; i < NoofTrans; i++) {
            Transamt[i] = sc.nextDouble()
        }

        println Transamt.max()

        def Creditlimit = Transamt.max()
        def Creditlimit1 = Creditlimit * 1.5
        println Creditlimit1
        println Creditlimit1.round(2)
    }
}

与您的输入一起执行时,输出为:

7564.994
11347.491
11347.49