Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

[Giúp đỡ] Tìm và xuất học viên có điểm trong khoảng từ min tới max.

Discussion in 'Xây dựng các ứng dụng Java khác, các vấn đề khác' started by vanthanh1411, 4/3/18.

  1. vanthanh1411

    vanthanh1411 New Member

    Mình đang làm bài nhưng mới tới yêu cầu 3 thì không cách nào làm cho nó xuất học viên có điểm trong khoảng nhập vào được. Mong mọi người giúp đỡ

    Student.java
    Code:
    
    package assignment;
    
    import java.util.Scanner;
    
    public class Student {
        private String name;
        private double score;
        private String email;
        private double min;
        private double max;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getScore() {
            return score;
        }
    
        public void setScore(double score) {
            this.score = score;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
       
        public void nhapdshv(Scanner scanner){
            System.out.print("Name of Student: ");
            this.name=scanner.nextLine();
            System.out.print("Score of Student: ");
            this.score=scanner.nextDouble();
            scanner.nextLine();
            System.out.print("Email of Student: ");
            this.email=scanner.nextLine();
        }
        public String rank(){
            if(score<3){
                return "Kém";
            }
            else if(score<5){
                return "Yếu";
            }
            else if(score<6.5){
                return "Trung Bình";
            }
            else if(score<7.5){
                return "Khá";
            }
            else if(score<9){
                return "Giỏi";
            }
            else{
                return "Xuất Sắc";
            }
        }
       
        public void xuatdshv(){
            System.out.println("Name: "+this.name+"\t Score: "+this.score+"\t Email: "+this.email+"\t Rank: "+rank());
        }
       
        public void searchscore(Scanner scanner){
            System.out.println("Nhập khoảng điểm cần tìm từ Min đến Max:");
            System.out.print("Nhập Min: ");
            this.min=scanner.nextDouble();
            System.out.print("Nhập Max: ");
            this.max=scanner.nextDouble();
        }
       
        public void searchscore1(){
            if(score<=min&&score>=max){
                System.out.println("Name: "+this.name+"\t Score: "+this.score+"\t Email: "+this.email+"\t Rank: "+rank());
            }
        }
       
         public void test(){
            System.out.println(this.min+"\t"+this.max);
        }
    }
    
    StudentList.java

    Code:
    package assignment;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class StudentList {
        public ArrayList<Student> list = new ArrayList<>();
       
        public void inputStudents(int number, Scanner scanner){
            for (int i = 0; i < number; i++) {
                Student stud = new Student();
                System.out.println("Enter student " + (i+1));
                stud.nhapdshv(scanner);
                list.add(stud);
            }
        }
       
        public void outputStudent(int number){
            for (Student student : list) {
                student.xuatdshv();
            }
        }
        public void score(int number, Scanner scanner){
            Student range = new Student();
            range.searchscore(scanner);
            range.test();
            for(Student student:list ){
                range.searchscore1();
            }
        }
    }
    
    Assigment.java
     
  2. D.A.N_3002

    D.A.N_3002 Active Member

    Cái này đơn giản mà : Chạy 1 vòng for từ 0 đến size của student.list rồi kiểm tra xem điểm nào < điểm nhập vào thì print ra
    Code demo :
    Code:
    int input = 5; // Số nhập vào
    ArrayList list = students.list; // Lấy list ở studnets
    for(int i = 0; i < list.size(); i++)
    {
        if(list.get(i).getScore() < input)
        {
            System.out.println(list.get(i));
        }
    }
     
  3. vanthanh1411

    vanthanh1411 New Member

    Min max nhập vào từ bàn phím á cậu. Mình nhập vào mà nó không nhận.
     
  4. D.A.N_3002

    D.A.N_3002 Active Member

    Vậy tức là vấn đề của bạn là ở chỗ không nhận số min, max nhập vào ??
     
  5. vanthanh1411

    vanthanh1411 New Member

    Đúng r cậu.
     
  6. D.A.N_3002

    D.A.N_3002 Active Member

    Bạn post code nhập vào lên đây được ko ?
     
  7. vanthanh1411

    vanthanh1411 New Member

    code nhập vào của mình bên Student.java á cậu. Mình up ở trên đó
     
  8. D.A.N_3002

    D.A.N_3002 Active Member

    Mình biết vần đề của bạn là ở đâu rồi, ở đoạn
    Code:
    Student range = new Student();
    range.searchscore(scanner);
    Tức là hàm searchscore sẽ dùng min, max, score của Student range chứ không phải trong list mà Student range chưa dc set min, max, score nên tất cả sẽ = 0.0

    Bây h bạn sửa lại các hàm như thế này rồi đẩy vào Class StudentList chứ đừng để ở class Student (nó chỉ nên chứa getter, setter thôi còn tất cả các hàm xử lý để ở StudentList) và chuyển int min, max sang Class StudentList luôn =)
    Code:
        public void outputStudent(int number){
            for (Student student : list) {
                student.xuatdshv();
            }
        }
        public void score(int number, Scanner scanner){
            searchscore(scanner);
            for(int i = 0; i < list.size(); i++ )
            {
                searchscore1(list.get(i));
            }
        }  
           public void searchscore(Scanner scanner)
           {
            System.out.println("Nhập khoảng điểm cần tìm từ Min đến Max:");
            System.out.print("Nhập Min: ");
            this.min=scanner.nextDouble();
            System.out.print("Nhập Max: ");
            this.max=scanner.nextDouble();
          }
     
        public void searchscore1(Student stu){
           
            if(stu.getScore() >= this.min && stu.getScore()<= this.max){
                stu.xuatdshv();
            }
        } 
     
    Last edited: 4/3/18
    vanthanh1411 likes this.
  9. vanthanh1411

    vanthanh1411 New Member

    À cho mình hỏi cậu nói min max chuyển qua class Student nhưng this.min, this.max lại ở bên StudentList thì làm sao gọi nó sang vậy cậu?
     
  10. D.A.N_3002

    D.A.N_3002 Active Member

    Ah mình viết nhầm, sr bạn :(( Chuyển sang Class StudentList nhé :(
     
    vanthanh1411 likes this.
  11. vanthanh1411

    vanthanh1411 New Member

    Tks cậu. À vậy nếu đến lúc cần thiết mình cũng phải chuyển trường score hay name hoặc email qua StudentList luôn hở cậu. Không có cách nào để range.searchscore với student.searchscore1 dùng chung min max được hở cậu.
     
  12. D.A.N_3002

    D.A.N_3002 Active Member

    Ko ko ! Mấy cái đó là thuộc vào Student nên bắt buộc phải ở trong Class Student, còn nếu bạn muốn dùng score, name, email của 1 Student thì có thể dùng getter
    VD :
    Code:
    student.getName() // Lấy name của Student student
    range.getName() // Lấy name của Student range
    Nếu bạn để int min, max ở Class StudentList và void searchscore(), searchscore1() thì range.searchscore hay student.searchscore1 đều dùng chung 1 min, max hết nhé
     
    vanthanh1411 likes this.
  13. vanthanh1411

    vanthanh1411 New Member

    A, mình hiểu sơ sơ r, tks cậu lần nữa nha :)
     
    D.A.N_3002 likes this.
  14. kienxx

    kienxx Member

    Lập trình hướng đối tượng.
    Mình lười đọc code của bạn. Bài này bạn tạo 1 cái ArrayList<SinhVien> DsSinhVien = new ArrayList<SinhVien>
    Danh sách này chứa tất cả sinh viên được tạo ra. Để lấy điểm 1 sinh viên thì trong hàm SinhVien.java bạn dùng hàm getScore() trả về điểm sv đó. Nếu 1 sinh viên có nhiều loại điểm khác nhau thì tạo ArrayList chứa các điểm ấy. Và cái getScore() kia sẽ trả về mảng, bạn phải getScore().vitri nữa
    Giả sử khi so sánh tìm những người cao điểm hơn 1 con số n nào (trường hợp mỗi SV chỉ có 1 loại điểm) thì dùng hàm
    for (int i=0; i<DsSinhVien.size(); i++)
    {
    if(n <= DsSinhVien.get(i).getScore()) System.out.println (Ds.SinhVien.get(i).getName()); //Mình thấy qua, chưa biết bạn tạo, gán giá trị ArrayList đúng hay sai
    } //Nhưng thấy bạn gọi thiếu tham số vị trí trong ArrayList
     
    D.A.N_3002 likes this.
  15. Đông Vũ

    Đông Vũ New Member

    this.min=scanner.nextDouble();
    Mình nghĩ vấn đề nằm ở chỗ này, Bạn sửa thành this.min = Double.parseDouble(scanner.nextLine()); thửu đi
     
  16. D.A.N_3002

    D.A.N_3002 Active Member

    Hai cái này giống nhau mà bạn :)
     

Chia sẻ trang này

Loading...