我有一个java项目,我被告知要写一个程序,要求用户输入一些天和温度。从那里我必须找到平均温度,高于平均温度的天数,以及从最高到最低的温度分类。 * 我已成功完成所有这些事情,但是,我的教授要求我通过创建单独的方法来简化我的代码。例如,有一个超过平均值的方法,等等。虽然我理解这个概念,但我不确定如何接近并采用这种方式。 * 请帮帮忙?
这是我到目前为止的代码:
import java.util.Scanner;
public class NumberAboveAverage {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Enter number of days of temperature to calculate:");
Scanner keyboard = new Scanner(System. in);
int day = keyboard.nextInt();
int[] temperature = new int[day];
System.out.println("Enter " + day + " temperatures to calculate.");
for(int i=0; i<day; i++){
temperature[i] = keyboard.nextInt();
}
int sum = 0;
for(int i=0; i<day; i++){
sum = sum + temperature[i];
}
int average = sum/day;
System.out.println("The average temperature is: " + average);
int daysOver=0;
for(int i=0; i<day; i++){
if (temperature[i] > average){
daysOver++;
}
}
System.out.println("The temperature was above average for " + daysOver + " day(s).");
for (int i = 0; i < temperature.length; i++) {
int min = i;
for (int j = i; j < temperature.length; j++) {
if (temperature[j] < temperature[min])
min = j;
}
int temp;
temp = temperature[i];
temperature[i] = temperature[min];
temperature[min] = temp;
}
System.out.print("The temperatures in increasing order are: ");
for(int i=0; i<day; i++){
System.out.print(temperature[i]+" ");
}
}
}
答案 0 :(得分:4)
分解代码的好方法是用英语进行分解!你自己说:
编写一个程序,要求用户输入若干天和温度。从那里我必须找到平均温度,高于平均温度的天数,以及从最高到最低的温度分类。
然后我们可以把它变成代码!
public static void main(String []args) {
int[] temperature = getUserInput();
int average = getAverage(temperature);
int daysOver = getDaysOver(temperature, threshold);
System.out.println("Average of : " + average + " with " + daysOver + " really hot days");
}
现在,您可以将代码放入这些函数中,并打印出您喜欢的任何内容:)
答案 1 :(得分:1)
将代码分解为每个解决难题的步骤。例如,有一种计算平均温度的方法,另一种计算高于平均温度的天数的方法,以及另一种按升序排序温度的方法。
答案 2 :(得分:1)
我不会在代码中回答你的问题,而是会给你一些指示。
你可以抽象出一些功能。
答案 3 :(得分:1)
您可能希望使用以下单独的方法执行一项任务:
public static void main(String[] args) {
int[] temperature = new int[1];
Scanner keyboard = new Scanner(System. in);
readTemperatures(keyboard, temperature);
int sum = getSum(temperature);
int average = sum/temperature.length;
System.out.println("The average temperature is: " + average);
int daysOver=getDaysOver(temperature, average);
System.out.println("The temperature was above average for "
+ daysOver + " day(s).");
sortTemperature(temperature);
printTemperature(temperature);
}
并创建如下方法:
private static void printTemperature(int[] temperature) {
System.out.print("The temperatures in increasing order are: ");
for(int i=0; i<temperature.length; i++){
System.out.print(temperature[i]+" ");
}
}
private static void readTemperatures(Scanner keyboard, int[] temperature){
System.out.println("Enter number of days of temperature to calculate:");
int day = keyboard.nextInt();
temperature = new int[day];
System.out.println("Enter " + day + " temperatures to calculate.");
for(int i=0; i<day; i++){
temperature[i] = keyboard.nextInt();
}
}
完成其余的方法。
答案 4 :(得分:0)
嗯,首先,选择一些相当完整的陈述序列,例如:
int daysOver=0;
for(int i=0; i<day; i++){
if (temperature[i] > average){
daysOver++;
}
}
找出您需要输入的参数以及您需要的结果:
(对于nonce,我忽略了复杂性/“优化”,你可以从数组的大小得到day
。)
因此,方法可能是:
computeDaysOver(int[] temperature, int average, int day) {
int daysOver=0;
for(int i=0; i<day; i++){
if (temperature[i] > average){
daysOver++;
}
}
}
但是你需要指定一个返回类型,并实际返回它:
int computeDaysOver(int[] temperature, int average, int day) {
int daysOver=0;
for(int i=0; i<day; i++){
if (temperature[i] > average){
daysOver++;
}
}
return daysOver;
}
当然,您需要用新方法替换原始代码的位置:
int daysOver = computeDaysOver(temperature, average, day);
请注意,在选择要包含在函数中的操作时,使用有限数量的输入和输出“绘制圆形”操作并具有明确定义的目的非常重要。尝试包含一整套连接操作,而不仅仅是一组任意设置。
例如,您可以编写一个包含求和循环和除法的computeAverage
函数。除非有一些单独的需求来计算求和,否则通常不会在函数和除外(或在单独的函数中)中的求和循环。并且,如果由于某种原因需要将求和作为单独的函数,则需要使computeAverage
函数调用求和函数然后进行除法,而不是将求和作为参数传递。
(在这种情况下,这些示例相当简单,但原则会延续到更大,更复杂的代码块。)
答案 5 :(得分:0)
那么为什么人们会将他的代码分解成不同的方法呢?这是因为为了分离不同的不同逻辑/要求,所以code becomes readable and bug hunting becomes easy
。
在你的情况下,你有这些事情要做:
calculating the average will go into separate method.
sorting the temperatures-will go into separate method..
A method that prints temperatures in order.
因此,方法具有返回类型。这意味着经过计算并经过逻辑后,它会带来一些输出,所以我们可以使用返回类型的方法来获取这个值。
现在使用之后可以像这样使用你的类的对象
MyClass myClassObj = new MyClass();
现在使用像
这样的引用变量myClassObj
来调用你的方法
myClassObj.myMethod();
如果返回某个内容,则将其保存到变量中。
因此,如果像myMethod()
一样返回String
值,那么我们可以这样做,以便在调用方法中获得myMethod()
的结果:
String myStrVar = myClassObj.myMethod();