2012-11-02 26 views
5

我有一個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

您還需要將(幾乎)所有內容移出'main()'並創建重要的變量實例字段。 – Dmitri

回答

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

完成其餘的方法。

+0

謝謝!我現在明白了。 – user1793083

+0

沒關係,我明白了。謝謝! – user1793083

1

破壞你的代碼成,每解決一個謎題的一部分步驟。例如,有一種方法來計算平均溫度,另一種方法是計算高於平均溫度的天數,另一種方法是按升序排列溫度。

1

而不是在代碼中回答你的問題,我會給你一些指示。

你有幾個功能可以抽象出來。

  • 計算平均值的函數。
  • 一個計算平均天數的函數。
  • 一個排序溫度的函數。
  • 按順序打印溫度的功能。
4

分解代碼的好方法是用英文分解!你自己說的:

編寫一個程序,要求用戶輸入天數和溫度。從那裏我必須找到平均溫度,平均溫度以上的天數,以及從最高到最低的溫度。

  • 要求用戶輸入一個天數和溫度的
  • 發現平均氣溫
  • 排序tempatures

然後我們就可以變成這個代碼!

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"); 
} 

現在你可以把你的代碼中的這些功能,並打印出任何你喜歡:)

0

嗯,首先挑選語句的一些合理的完整序列,如:

int daysOver=0; 
for(int i=0; i<day; i++){ 
    if (temperature[i] > average){ 
     daysOver++; 
    } 
} 

找出你需要飼料什麼parms和你需要什麼結果:

  • 天(也許應該調用「numDays」,但噸帽子是另一個討論)
  • 溫度[]
  • 閾值(平均)
  • 回報daysOver

(我忽略,對於現時的複雜性/ 「優化」,你可以從得到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函數,其中包含summation循環和除法。除非有一些單獨的需要計算總和,否則通常不會在函數和外部(或單獨的函數)中使用求和循環。而且,如果你出於某種原因需要將求和作爲一個單獨的函數,那麼你可以讓你的函數調用求和函數,然後進行除法,而不是將求和作爲參數傳入。

(這些例子在這種情況下相當瑣碎,但原則結轉到更大,更復雜的代碼塊。)

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(); 
相關問題