如何简化大量的nextInt / nextDouble?

时间:2015-10-17 23:51:32

标签: java

所以我创建了一个程序,用于确定最终学期的课程成绩,考虑作业和考试成绩以及他们在该成绩中所占的百分比。单个学生的成绩和百分比信息将在一行中给出。 Soooo,我只有一个问题:

        q1 = input.nextInt();
        q1p = input.nextDouble();
        q2 = input.nextInt();
        q2p = input.nextDouble();
        q3 = input.nextInt();
        q3p = input.nextDouble();

        l1 = input.nextInt();
        l1p = input.nextDouble();
        l2 = input.nextInt();
        l2p = input.nextDouble();
        l3 = input.nextInt();

有没有更好的方法来简化int&的输入混乱双??

2 个答案:

答案 0 :(得分:1)

从输入变量中我可以看到,看起来你正在使用Scanner API,我是对的吗?如果是这样,那么你可以使用一个简单的外观做一些非常好的事情,并且扫描器的下一个条件是验证是否有读取的输入。最后,为了检测输入是双精度还是整数,我们将做一个简单的检查以确保!

Collection<Integer> integers= new ArrayList<>();
Collection<Double> doubles = new ArrayList<>();

while(input.hasNext())
{

 if (input.hasNextInt()) {
     integers.add(input.nextInt());
}else if(input.hasNextDouble()) {
     doubles.add(input.nextDouble());
}else
     input.next(); // will simply move to next value in the line
}

这样,您不必像使用静态用户输入一样在nextInt或NextDouble之前进行每次检查,您不必担心。如果输入不是double或int,那么列表将保持为空!

<强>更新

更改集合列表的使用,以便在运行时减少麻烦!解决方案目前应该非常适合您。我还在if结构中添加了一个子句,以便在hasNext == false

时使循环完整

答案 1 :(得分:0)

您可以使用两个数组并循环遍历它们:

int numberOfInputs = XXX;
int[] ints = new int[numberOfInputs];
double[] doubles = new double[numberOfInputs];

for (int i = 0; i < numberOfInputs; i++)
{
    ints[i] = input.nextInt();
    doubles[i] = input.nextDouble();
}

如果您需要它更灵活且没有(联合国)拳击问题,您可以使用Colletion

Collection<Integer> ints = new ArrayList<>();
Collection<Double> doubles = new ArrayList<>();

while (moreInput)
{
    ints.add(input.nextInt());
    doubles.add(input.nextDouble());
}

moreInput是一种随意的条件,您需要根据自己的需要进行调整。

如果有2个int和1个double,则可以在循环中添加条件。