2012-11-02 13 views
5

Mam projekt java, w którym kazano mi napisać program, który prosi użytkownika o wprowadzenie liczby dni i temperatur. Stamtąd muszę znaleźć średnią temp, dni powyżej średniej temperatury, a także sortowanie temperatur od najwyższej do najniższej. * Z powodzeniem wykonałem wszystkie te czynności, jednak mój profesor prosi mnie, abym uprościł mój kod, tworząc oddzielne metody. Na przykład, mając metodę na dni powyżej średniej i tak dalej. Chociaż rozumiem koncepcję tego, nie jestem pewien, jak podejść i iść w ten sposób. * Proszę o pomoc?Jak to napisać w osobnych metodach?

Oto kod, który mam do tej pory:

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

Będziesz także chciał przenieść (prawie) wszystko z 'main()' i utworzyć ważne zmienne pola instancji. – Dmitri

Odpowiedz

1

może chcesz wykonać jedno zadanie w odrębnych metod jak poniżej :

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

i stworzenie metody, jak poniżej:

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

Uzupełnij pozostałe metody.

+0

dzięki! teraz rozumiem. – user1793083

+0

nieważne, rozumiem. dzięki! – user1793083

1

złamać kod się do kroków, które każdy rozwiązać kawałek układanki. Na przykład, można obliczyć średnią temperaturę, inną metodę obliczania dni powyżej średniej temperatury i inną metodę sortowania temperatur w porządku rosnącym.

1

Zamiast odpowiadać na twoje pytanie dla ciebie w kodzie, dam ci kilka wskazówek.

Masz kilka funkcji, które możesz pominąć.

  • Funkcja obliczająca średnią.
  • Funkcja obliczająca liczbę dni ponad średnią.
  • Funkcja sortująca temperatury.
  • Funkcja, która drukuje temperaturę w określonej kolejności.
4

Dobre podejście do dekompozycji kodu ma taki sam rozkład w języku angielskim! Sam powiedziałeś:

napisać program, który prosi użytkownika o wprowadzenie liczby dni i temperatur. Stamtąd muszę znaleźć średnią temp, dni powyżej średniej temperatury, a także sortowanie temperatur od najwyższej do najniższej.

  • Poproś użytkownika o wprowadzenie liczby dni i temperatur
  • uważają Temp
  • rodzaju na tempatures

Możemy następnie przekształcić kodu!

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

Teraz możesz umieścić swój kod w tych funkcji i wydrukować co chcesz :)

0

Cóż, na początek wybrać jakąś kompletną sekwencję sprawozdania, np:

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

Dowiedz się, jakie pliki potrzebne do podania i jaki wynik potrzebujesz:

  • dzień (może powinien zadzwonić "numDays", ale t kapelusz inna dyskusja)
  • temperatura []
  • próg (średnio)
  • powrót daysOver

(ja ignoruje, dla nonce, złożoność/"optymalizacja", które można dostać day od . rozmiar tablicy)

Tak, metoda może być:

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

Ale trzeba określić typ zwracanej, a właściwie powrót go:

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

i oczywiście trzeba zastąpić nową metodę gdzie oryginalny kod był:

int daysOver = computeDaysOver(temperature, average, day); 

Należy pamiętać, że przy wyborze operacje, które należy uwzględnić w funkcji, ważne jest, aby "narysować okrąg" z ograniczoną liczbą wejść i wyjść oraz z jasno określonym celem. Spróbuj dołączyć kompletny zestaw połączonych operacji, a nie tylko dowolny zestaw.

Na przykład można napisać funkcję computeAverage obejmującą pętlę sumującą i dzielenie. Normalnie nie miałbyś tylko pętli podsumowania w funkcji i podziału na zewnątrz (lub w oddzielnej funkcji), chyba że istniała jakaś osobna potrzeba obliczania tylko sumy. A jeśli z jakiegoś powodu potrzebujesz sumowania jako oddzielnej funkcji, możesz wywołać funkcję computeAverage wywołania funkcji sumowania, a następnie zrobić podział, zamiast przekazywać sumę jako parametr.

(Przykłady te są raczej trywialne w tym przypadku, ale zasady przeniesione do znacznie większych i bardziej złożonych bloków kodu.)

0

Więc dlaczego jedno użycie złamać jego kod do innej innej metody? Dzieje się tak, ponieważ w celu oddzielenia różnych różnych logicznych/wymagań, tak aby code becomes readable and bug hunting becomes easy.

W twoim przypadku masz te rzeczy do zrobienia:

calculating the average will go into separate method. 
sorting the temperatures-will go into separate method.. 
A method that prints temperatures in order. 

Z tego powodu metody mają typ zwracany. Oznacza to, że po obliczeniu i przejściu przez logikę, przyjdzie z pewnym wyjściem, więc możemy użyć metody zwracania, aby uzyskać tę wartość.

Teraz po tym stosowanie może uczynić przedmiot swojej klasie jak ten

MyClass myClassObj = new MyClass(); 

I teraz nazywają swoje metody za pomocą zmiennej referencyjnej myClassObj jak ten

myClassObj.myMethod(); 

i zapisać go do zmiennej jeśli zwróci coś.

Więc jeśli tak jak myMethod() zwraca wartość String więc możemy zrobić tak, aby wyniki naszych myMethod() w metodzie wywołującego:

String myStrVar = myClassObj.myMethod(); 
Powiązane problemy