2017-02-12 108 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開始。