2012-11-02 26 views
5

Tôi có một dự án java, nơi tôi được yêu cầu viết một chương trình yêu cầu người dùng nhập vào một số ngày và nhiệt độ. Từ đó tôi phải tìm nhiệt độ trung bình, những ngày trên nhiệt độ trung bình, cũng như phân loại nhiệt độ từ cao nhất xuống thấp nhất. * Tôi đã làm tất cả những điều này thành công, tuy nhiên, giáo sư của tôi yêu cầu tôi đơn giản hóa mã của tôi bằng cách tạo các phương thức riêng biệt. Ví dụ, có một phương pháp cho những ngày trên trung bình, và như vậy. Mặc dù tôi hiểu khái niệm về điều này, tôi không chắc chắn làm thế nào để tiếp cận và đi theo cách này. * Vui lòng trợ giúp?Làm cách nào để viết điều này theo các phương pháp riêng biệt?

Đây là mã mà tôi có cho đến nay:

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ạn cũng sẽ muốn di chuyển (gần như) mọi thứ ra khỏi 'main()' và tạo các trường biến quan trọng. – Dmitri

Trả lời

1

Bạn có thể muốn thực hiện một nhiệm vụ trong một phương pháp riêng biệt như sau :

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

và tạo các phương pháp như sau:

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

Hoàn thành phần còn lại của các phương pháp.

+0

cảm ơn! bây giờ tôi hiểu rồi. – user1793083

+0

đừng bận tâm tôi hiểu. cảm ơn! – user1793083

1

Phá vỡ mã của bạn lên thành những bước mà mỗi giải quyết một mảnh của câu đố. Ví dụ, có một phương pháp để tính toán nhiệt độ trung bình, một phương pháp khác để tính toán những ngày trên nhiệt độ trung bình và một phương pháp khác để sắp xếp nhiệt độ theo thứ tự tăng dần.

1

Thay vì trả lời câu hỏi của bạn cho bạn bằng mã, tôi sẽ cung cấp cho bạn một số gợi ý.

Bạn có một vài chức năng mà bạn có thể tóm tắt.

  • Một hàm tính giá trị trung bình.
  • Một hàm tính số ngày trên mức trung bình.
  • Một chức năng sắp xếp nhiệt độ.
  • Một chức năng in nhiệt độ theo thứ tự.
4

Cách tiếp cận tốt để phân tách mã là cùng phân tích bằng tiếng Anh! Bạn đã tự mình nói:

viết chương trình yêu cầu người dùng nhập vào một số ngày và nhiệt độ. Từ đó tôi phải tìm nhiệt độ trung bình, những ngày trên nhiệt độ trung bình, cũng như phân loại nhiệt độ từ cao nhất xuống thấp nhất.

  • Yêu cầu người dùng nhập vào một số ngày và nhiệt độ
  • tìm temp trung bình
  • loại các tempatures

Sau đó chúng ta có thể tắt chức năng này vào mã!

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

Bây giờ bạn có thể đặt mã của bạn trong những chức năng, và in ra bất cứ điều gì bạn thích :)

0

Vâng, đối với người mới bắt đầu chọn một số chuỗi hợp lý hoàn chỉnh báo cáo, ví dụ:

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

Tìm hiểu xem bạn cần ăn loại parm nào và bạn cần kết quả nào:

  • ngày (có thể gọi là "numDays", nhưng t mũ là một cuộc thảo luận)
  • nhiệt độ []
  • ngưỡng (trung bình)
  • trở daysOver

(tôi bỏ qua, cho các nonce, mức độ phức tạp/"tối ưu hóa" mà bạn có thể nhận được day từ . kích thước của mảng)

Vì vậy, một phương pháp có thể là:

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

Nhưng bạn cần phải xác định một kiểu trả về, và thực sự trở lại nó:

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

Và tất nhiên, bạn cần phải thay thế phương pháp mới cho nơi mã ban đầu là:

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

Lưu ý rằng khi chọn các hoạt động được bao gồm trong một hàm quan trọng là "vẽ vòng tròn xung quanh" các phép toán với số lượng đầu vào và đầu ra hạn chế và với mục đích được xác định rõ ràng. Cố gắng bao gồm một tập hợp đầy đủ các hoạt động được kết nối, không chỉ là một tập hợp tùy ý. Ví dụ:

Ví dụ: bạn có thể viết hàm computeAverage bao gồm vòng lặp tổng hợp và phân chia. Bạn sẽ không bình thường chỉ có vòng lặp tổng kết trong một hàm và phép chia bên ngoài (hoặc trong một hàm riêng biệt) trừ khi có một số nhu cầu riêng biệt để tính toán chỉ tổng kết. Và, nếu bạn đã làm một số lý do cần tổng kết như là một chức năng riêng biệt, bạn sẽ làm cho hàm computeAverage của bạn gọi hàm tổng kết và sau đó thực hiện phép chia, thay vì truyền trong tổng như một tham số.

(Những ví dụ này chứ không phải tầm thường trong trường hợp này, nhưng các nguyên tắc chuyển sang khối lớn hơn nhiều và phức tạp hơn của mã.)

0

Vậy tại sao một sử dụng để phá vỡ mã của mình vào phương pháp khác nhau khác nhau? Đó là bởi vì để tách logic khác nhau/yêu cầu khác nhau, để code becomes readable and bug hunting becomes easy.

Trong trường hợp của bạn, bạn có những điều cần làm:

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

Vì lý do này phương pháp có một kiểu trả về. Điều này có nghĩa là sau khi tính toán và đi qua logic, nó sẽ đi kèm với một số đầu ra, Vì vậy, chúng ta có thể sử dụng kiểu trả về của các phương thức để có được giá trị này.

Bây giờ sau khi sử dụng có thể làm cho đối tượng của lớp học của bạn như thế này

MyClass myClassObj = new MyClass(); 

Và bây giờ gọi các phương thức bằng cách sử dụng tài liệu tham khảo biến myClassObj như thế này

myClassObj.myMethod(); 

và lưu nó vào một biến nếu nó trả về một cái gì đó.

Vì vậy, nếu như myMethod() trả về một giá trị String vì vậy chúng tôi có thể làm như thế này để có kết quả myMethod() của chúng tôi trong phương pháp gọi điện thoại:

String myStrVar = myClassObj.myMethod(); 
Các vấn đề liên quan