是否可以将此代码转换为for循环?

时间:2017-02-12 01:06:21

标签: java for-loop

我想知道是否可以将此代码转换为for循环。我知道你可以循环文本,但是,是否可以做一些类似于变量inputRangeCity1,inputRangeCity2等的东西。

    System.out.print("Enter maximum cell phone connectivity distance for city 1: ");
    double inputRangeCity1 = user_input.nextDouble();
    System.out.print("Enter maximum cell phone connectivity distance for city 2: ");
    double inputRangeCity2 = user_input.nextDouble();
    System.out.print("Enter maximum cell phone connectivity distance for city 3: ");
    double inputRangeCity3 = user_input.nextDouble();
    System.out.print("Enter maximum cell phone connectivity distance for city 4: ");
    double inputRangeCity4 = user_input.nextDouble();

2 个答案:

答案 0 :(得分:3)

如果将inputRangeCity1等声明为单独的局部变量,则几乎不可能使用循环。

如果将inputRangeCity1等声明为单独的实例(或类)变量,则可能使用反射。但是,这不是一个好的解决方案......因为代码会更复杂,更冗长,更脆弱。

最好/最简单的解决方案是使用数组而不是单独的变量:

    double[] inputRangeCities = new double[NOS_CITIES];

然后:

    for (int i = 1; i <= inputRangeCities.length; i++) {
        System.out.print("Enter maximum cell phone connectivity " +
                         "distance for city " + i + ": ");
        inputRangeCities[i - 1] = user_input.nextDouble();
    }

如果在您需要声明变量的位置未知(固定)城市数量,则应使用List代替。否则,数组更好......除非应用程序的某些其他部分可以从使用列表中受益。

如果数组/集合方法不是您所需要的,那么请考虑像这样重构:

private double readRange(Scanner input, int cityNo) {
    System.out.print("Enter maximum cell phone connectivity " +
                     "distance for city " + i + ": ");
    return input.nextDouble();
}

...
double inputRangeCity1 = readRange(user_input, 1);
double inputRangeCity2 = readRange(user_input, 2);
double inputRangeCity3 = readRange(user_input, 3);
double inputRangeCity4 = readRange(user_input, 4);

这是更多代码行 ...我不喜欢它......但它是另一种选择。

答案 1 :(得分:2)

使用列表而不是单个变量。

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

for(int i=1; i <= 4; i++)
{
     System.out.print("Enter maximum cell phone connectivity distance for city" + i);
     inputRangeCities.add(user_input.nextDouble());
}

然后,您可以访问第一个城市的值inputRangeCities.get(0)。请注意,Java列表或数组中的索引始终从0开始。