2012-04-27 24 views
5

Tôi đang cố gắng làm việc trên một bài tập Java. Đây là những gì nó yêu cầu:Đây có phải là cách chính xác để sử dụng IllegalArgumentException không?

Viết một lớp có tên TestScores. Lớp khởi tạo nên chấp nhận một mảng các điểm kiểm tra làm đối số của nó. Lớp nên có phương thức trả về điểm trung bình của các điểm kiểm tra. Nếu điểm kiểm tra trong mảng là âm hoặc lớn hơn 100, lớp sẽ ném một số IllegalArgumentException. Chứng minh. Tôi cần một tệp có tên là TestScoresTestScoresDemo.

Đây là những gì tôi có cho đến nay. Tôi biết một số của nó là sai và tôi cần sự giúp đỡ sửa chữa nó:

class TestScores { 
    public static void checkscore(int s) { 
     if (s<0) throw new IllegalArgumentException("Error: score is negative."); 
     else if (s>100) throw new IllegalArgumentException("Error Score is higher then 100"); 
     else if (s>89)throw new IllegalArgumentException("Your grade is an A"); 
     else if (s>79 && s<90)throw new IllegalArgumentException("Your grade is an B"); 
     else if (s>69 && s<80)throw new IllegalArgumentException("Your grade is an C"); 
     else if (s>59 && s<70)throw new IllegalArgumentException("Your grade is an D"); 
     else if (s<60)throw new IllegalArgumentException("Your grade is an F"); 

     { 
      int sum = 0; //all elements together 
      for (int i = 0; i < a.length; i++) 
       sum += a[i]; 
     } 
     return sum/a.length; 
    } 
} 

class TestScoresDemo { 
    public static void main(String[] args) { 
     int score = 0; 
     Scanner scanner = new Scanner(System.in); 
     System.out.print(" Enter a Grade number: "); 
     String input = scanner.nextLine(); 
     score = Integer.parseInt(input); 
     TestScores.checkscore(score); 
     System.out.print("Test score average is" + sum); 
    } 
} 

Tôi biết các cuộc gọi chuyển nhượng cho một tuyên bố try bởi vì trong cuốn sách của tôi đó là những gì tôi thấy với IllegalArgumentException. Ai giúp tôi với? Tôi đang sử dụng Eclipse như một IDE.

+2

Tại sao bạn cho rằng điều này là sai? Bạn có nhận được thông báo lỗi không? Chúng tôi không thể giúp nếu chúng ta không biết phần nào cần sửa chữa. –

+0

Cảm ơn bạn. Hãy để tôi kiểm tra lại và lấy lại cho bạn. Có lẽ nó chỉ là một lỗi kiểu đơn giản – Alexandria

+7

bạn chỉ nên ném một 'IllegalArgumentException' trong trường hợp đối số không hợp lệ trong trường hợp của bạn dưới 0 hoặc cao hơn 100. – twain249

Trả lời

3

Lớp học TestScores của bạn phải có hai thành viên: một nhà xây dựng chấp nhận một mảng điểm số và phương pháp trả về điểm trung bình của điểm số. Nhiệm vụ không hoàn toàn rõ ràng như thế nào trong số này nên ném một IllegalArgumentException nếu một điểm kiểm tra nằm ngoài phạm vi, nhưng tôi sẽ làm cho nó trở thành nhà xây dựng (vì đó là những gì có đối số).

public class TestScores { 
    public TestScores(int[] scores) throws IllegalArgumentException { 
     // test the scores for validity and throw an exception if appropriate 
     // otherwise stash the scores in a field for later use 
    } 

    public float getAverageScore() { 
     // compute the average score and return it 
    } 
} 

Bạn đang đi đúng hướng với lớp TestScoresDemo của mình. Trước tiên, nó sẽ cần thu thập một tập các điểm vào một mảng. Sau đó, nó sẽ xây dựng một đối tượng TestScores. Đây là những gì cần phải được bên trong một khối try/catch bởi vì nó có thể ném một ngoại lệ. Sau đó, bạn chỉ cần gọi getAverageScore() và làm điều gì đó với kết quả.

+0

Cảm ơn tất cả mọi người. Tôi sẽ cố gắng sửa lại nó. Đối với một số lý do im thực sự bị mất về nhiệm vụ này. – Alexandria

+0

@Alexandria - Bạn đang cố gắng làm quá nhiều trong phương thức 'checkscore' của bạn.Nó chỉ nên kiểm tra điểm số và ném một 'IllegalArgumentException' nếu thích hợp; nó không nên làm bất cứ điều gì khác. Viết các phương thức khác (và một hàm tạo) để thực hiện các phần khác của vấn đề. Điều đó sẽ giúp bạn trở lại đúng hướng. –

-2
public class TestScores { 
private final int[] scores; 

public TestScores(int[] scores) { 
    this.scores = scores; 
} 

public int getAverage() { 
    int sum = 0; 

    if(scores.length == 0) { 
     return 0; 
    } 

    for(int score: scores) { 
     if(score < 0 || score > 100) { 
      throw new IllegalArgumentException("Score is not valid!"); 
     } 
     sum += score; 
    } 
    return sum/scores.length; 
} 

}

+5

... và khi bản sao OP dán câu trả lời này và gửi nó, toàn bộ điểm của nhiệm vụ sẽ là tranh luận và OP sẽ không học bất cứ điều gì từ nó. –

+0

Wow. Khi một câu hỏi được gắn thẻ "bài tập về nhà", nó là hình thức nghèo để spoon-feed một câu trả lời. Đọc mục [Câu hỏi thường gặp về meta] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) về cách hỏi và trả lời các câu hỏi về bài tập về nhà. –

+1

Cảm ơn bạn. Bài đăng của anh ấy thực sự đã giúp đặc biệt với mọi người khác đầu vào và trợ giúp. Tôi có thể thấy sự khác biệt giữa tôi. Và tôi đã có một cái gì đó tương tự trong cuốn sách của tôi để điều này rồi. Tôi chỉ cần thêm một lần đánh bắt và thử và tìm ra cách để thực hiện điều đó một cách chính xác. Cảm ơn mọi người. – Alexandria

0

Một ngoại lệ là một cái gì đó sử dụng để xác định cái gì đó đã không đi đúng vào dòng chảy bình thường của một ứng dụng. Bạn phải ném IllegalArgumentException khi phương thức checkScore được gọi và nó tìm thấy bất kỳ đối số nào nằm ngoài phạm vi (từ 0 đến 100).

lớp của bạn nên có cấu trúc này:

lớp
public class TestScore { 

    private int scores[]; //With setters and getters. 

    public TestScore(int scores[]) { 
     //Here, you set the scores array to the one on this class. 
    } 

    public int getAverage() { 
     //You do the average here, and since you need to iterate over the 
     //array to sum each value, you can check the value and if it's not 
     //ok you throw the IllegalArgumentException. No throws keyword 
     //required since this kind of exception (like NullPointerException 
     //and many others) are unchecked exceptions, meaning they can be 
     //thrown by a method and it does not need to specify them. 
    } 

} 

Xét nghiệm này nên tạo một đối tượng TestScore với một mảng int như một tham số của constructor của nó. Sau đó, bạn thực hiện phương thức testAverageScore có câu lệnh try-catch trên đó, vì nó được yêu cầu gọi phương thức getAverage.

Hy vọng điều đó sẽ hữu ích. Chúc may mắn!.

EDIT: IllegalArgumentException là một ngoại lệ không được kiểm soát.

+0

Không cần setter cho 'điểm số'; nó được truyền trong hàm tạo. (Nó thậm chí có thể là 'final'.) –

+0

Nó chỉ là để bắt đầu khuyến khích việc sử dụng các tiêu chuẩn. Điều gì xảy ra nếu tương lai anh ta muốn đặt một mảng mới cho cùng một đối tượng? – Gamb

+0

Từ [Hướng dẫn Java] (http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html): "Một đối tượng được coi là _immutable_ nếu trạng thái của nó không thể thay đổi sau khi nó được xây dựng. các đối tượng bất biến được chấp nhận rộng rãi như một chiến lược âm thanh để tạo ra mã đơn giản, đáng tin cậy. " –

Các vấn đề liên quan