2017-02-12 136 views
-1

我想知道是否有可能将此代码转换为for循环。我知道,你可以查找文本,但是,是有可能做类似变量inputRangeCity1,inputRangeCity2等东西..是否有可能将此代码转换为for循环?

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(); 
+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); 

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

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开始。