首先,我将创建一个InputData
存储用户输入的类:
class InputData {
public int number1;
public int number2;
public int number3;
}
这本身就是一种有用的通用技术:将多个相关值收集到一个数据结构中。然后,您可以重写您的main
方法以使用此类而不是三个单独的int
变量,或者您可以更进一步,向InputData
该类添加一些行为。要添加的明显第一个行为是计算平均值:
class InputData {
public int number1;
public int number2;
public int number3;
public int average() {
return (number1 + number2 + number3) / 3;
}
}
有了这个,你可以重写你main
的如下:
public class Average3 {
static class InputData {
public int number1;
public int number2;
public int number3;
public int average() {
return (number1 + number2 + number3) / 3;
}
}
/**
* @param args
*/
public static void main(String[] args) {
InputData input = new InputData();
System.out.println("Enter the first integer.");
Scanner keyboard = new Scanner(System.in);
input.number1 = keyboard.nextInt();
System.out.println("Enter the second integer.");
input.number2 = keyboard.nextInt();
System.out.println("Enter the third integer.");
input.number3 = keyboard.nextInt();
System.out.println("The average of NUMBER1, NUMBER2, and NUMBER3 = "
+ input.average());
}
}
请注意,我创建了InputData
一个静态内部类Average3
. 它也可以是同一文件中的一个单独的顶级类(只要不是public
)或单独文件中的一个类。
对此的改进是在类中使用数组而不是单独的int
字段InputData
。您的程序可能如下所示:
public class Average3 {
static class InputData {
public int[] numbers;
InputData(int size) {
numbers = new int[size];
}
public int average() {
int sum = 0;
for (int number : numbers) {
sum += number;
}
return sum / numbers.length;
}
}
/**
* @param args
*/
public static void main(String[] args) {
String[] prompts = { "first", "second", "third" };
InputData input = new InputData(3);
Scanner keyboard = new Scanner(System.in);
for (int i = 0; i < prompts.length; ++i) {
System.out.println("Enter the " + prompts[i] + " integer.");
input.numbers[i] = keyboard.nextInt();
}
System.out.println("The average of NUMBER1, NUMBER2, and NUMBER3 = "
+ input.average());
}
}
在这里,我添加了一个构造函数InputData
来初始化数组并给它一个参数来设置数组的大小。
然后,您可以引入其他改进,例如使输入值的数量动态化(使用 anArrayList<Integer>
而不是int
数组)。但这超出了作业的具体要求。有些人(实际上很多人)倾向于自动进行这种概括。然而,极限编程的倡导者会指出,通常最好保持简单:为今天的需求设计和编码,而不是明天、下周或下个月的需求。
换句话说,你不知道下一个任务会带来什么,所以无论你在当前任务之外进行概括,都可能是浪费工作。