我想知道是否可以将此代码转换为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();
答案 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开始。