01/10/2018, 12:18

Mảng trong java - Cách đưa class vào mảng

Chào mọi người!!
Hiện bài tập em yêu cầu thế này
a)create a class: teacher: code(string), name(string),age(int),address(string)
b)write code(main method) to enter 2 teachers from keyboard and save it to array-arrayList
c)write a method to display all teachers from array
d)write a method to display teachers from array having age are greater than 25 year old
Em đã làm được 3 câu, còn câu b em cũng có y tưởng nhưng nó báo lỗi, nên chạy lên đây hỏi.

package bai2;
import java.util.Scanner;
class Teacher
{
public String code,name,address;
public int age;
}

public class Bai2 {
    
static Teacher inp()
{
 Teacher a= new Teacher();
 Scanner nhap= new Scanner(System.in);
 System.out.print("Teacher's name: ");
 a.name=nhap.nextLine();
 System.out.print("Teacher's code: ");
 a.code=nhap.nextLine();
 System.out.print("Teacher's address: ");
 a.address=nhap.nextLine();
 System.out.print("Teacher's age: ");
 a.age=nhap.nextInt();
 return a;
}

static void infTeacher(Teacher a)
 {
        System.out.println("Teacher's name "+a.name);
        System.out.println("Teacher's code "+a.code);
        System.out.println("Teacher's address "+a.address);
        System.out.println("Teacher's age "+a.age);
        
 }

static void compare(Teacher a)
{
   if(a.age>25) {
       infTeacher(a);
   }
}

    public static void main(String[] args) {
    int n;
    Scanner num= new Scanner(System.in);
  
Teacher a=new Teacher();
 a = inp();
 System.out.println("===================================");
Teacher b=new Teacher();
 b = inp();
System.out.println("===================================");
infTeacher(a);
 System.out.println("===================================");
infTeacher(b);
System.out.println("===================================");
 System.out.println("Teacher older than 25");
compare(a);
System.out.println("===================================");
compare(b);
System.out.println("===================================");
}
}

Còn phần mảng thì ý tưởng em là như thế này

int n;
    Scanner num= new Scanner(System.in);
    System.out.println("Number of teacher");
    n=num.nextInt();
    int[] a;
    a = new int[n];
    int i=0;
    For(i;i<=n;i++)
    {
        Teacher a[i]=new Teacher();
        a[i]=inp();
        System.out.println("===================================");
    }
    For(i;i<=n;i++){
        infTeacher(a[i]);
        System.out.println("===================================");
    }
    
    For(i;i<=n;i++){
        compare(a[i]);
        System.out.println("===================================");
    }

nhưng nó lại báo lỗi các bác ạ

Em không hiểu lắm, nó sai vì lý do gì ạ??
Và nếu được các bác có thể định hướng cho em câu b) làm thế nào là đúng không ạ
Vì em mới chuyển qua học java nên còn hơi bỡ ngỡ
Bác nào rảnh thì giúp e với, em xin cảm ơn

Quân viết 14:26 ngày 01/10/2018

Với mấy lỗi liên quan đến syntax thì bạn thử tự xem thông báo lỗi từ ide là gì, kết hợp với xem lại sách xem giải quyết được không đã rồi hãy hỏi, nhìn sơ thì bạn sai cú pháp cơ bản rất nghiêm trọng

Quang Minh viết 14:33 ngày 01/10/2018

Khổ là em tự học bác ơi, học qua ví dụ của họ với lại mấy cái khóa free trên mạng ấy, thế đây là lỗi syntax hả bác. để em gooogle ra đọc cái đã

Phan Bá Hải viết 14:32 ngày 01/10/2018

bạn đã học vòng lặp for chưa?

for(int i = 0; i<=n; i++) {
    // Some code here...
}
Quang Minh viết 14:33 ngày 01/10/2018

Nó y như code m mà, m có thói quen khai báo i ở ngoài á

Phan Bá Hải viết 14:27 ngày 01/10/2018

Còn cái array a là gì thế?
Để i bên ngoài thì i sẽ bị gán gán trị khi vòng lặp for đầu tiên thực hiện (i++) mấy thằng for sau nó không hoạt động

Quang Minh viết 14:22 ngày 01/10/2018

Sửa lại đưa int vào for vẫn báo lỗi :’(
Còn array a thì ý tưởng của mình là nhập số lượng có trong mảng
Để có giới hạn mà chạy for
Và đến cái a[i] nào thì gọi class a[i] đó ra

Hung viết 14:32 ngày 01/10/2018

Correct

teachers[i] = new Teacher();

Incorrect

Techer teachers[i] = new Teacher();
Quang Minh viết 14:31 ngày 01/10/2018

Em vẫn không hiểu cái hàm arrray nó khai báo với lại hoạt động thế nào, java khác C/C++ nhiều quá @@
Để em vật lộn với cái đống lỗi này đã
Và cái chương trình đầu tiên em đưa có dạng Teacher a=new Teacher(); mà sao nó vẫn chạy anh nhỉ

Quân viết 14:25 ngày 01/10/2018

Y đâu mà y bạn, của bạn viết là For còn đúng phải là for. Quan trọng viết hoa viết thường bạn à

Quang Minh viết 14:25 ngày 01/10/2018

Cảm ơn anh, em đã coi lại phần cấu trúc lệnh cơ bản @@ cái này nó rắc rối quá. Cho phép em hỏi là cái ý tưởng của em có đúng không, còn cái phần cấu trúc em đang tự sửa cho nhớ anh ạ

Quang Minh viết 14:33 ngày 01/10/2018

Đã xong bài hoàn chỉnh cảm ơn mọi người đã giúp đỡ em ạ
package bai2;
import java.util.*;
class Teacher
{
public String code,name,address;
public int age;
}

public class Bai2 {
    
static Teacher inp()
{
 Teacher a= new Teacher();
 Scanner nhap= new Scanner(System.in);
 System.out.print("Teacher's name: ");
 a.name=nhap.nextLine();
 System.out.print("Teacher's code: ");
 a.code=nhap.nextLine();
 System.out.print("Teacher's address: ");
 a.address=nhap.nextLine();
 System.out.print("Teacher's age: ");
 a.age=nhap.nextInt();
 return a;
}

static void infTeacher(Teacher a)
 {
        System.out.println("Teacher's name "+a.name);
        System.out.println("Teacher's code "+a.code);
        System.out.println("Teacher's address "+a.address);
        System.out.println("Teacher's age "+a.age);
        
 }

static void compare(Teacher a)
{
   if(a.age>25) {
       infTeacher(a);
   }
}

/**
 *
 * @author Minh
 */   
//a)create a class: teacher: code(string), name(string),age(int),address(string)
//b)write code(main method) to enter 2 teachers from keyboard and save it to array-arrayList
//c)write a method to display all teachers from array
//d)write a method to display teachers from array having age are greater than 25 year old

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    // TODO code application logic here
    
    Teacher[] a = new Teacher[2] ;

    for(int i=0;i<2;i++)
    {
        a[i]=new Teacher();
        a[i]=inp();
        System.out.println("===================================");
    }
    for(int i=0;i<2;i++){
        infTeacher(a[i]);
        System.out.println("===================================");
    }
    
    for(int i=0;i<2;i++){
        compare(a[i]);
        System.out.println("===================================");
    }
}
}
Giang Phan viết 14:23 ngày 01/10/2018

Mình xin góp ý cách trình bày code của bạn chút nhé:

  • Import: bạn sử dụng class nào thì import class đó, không nên import.*
  • Cặp dấu {}: trong java dấu ngoặc đầu tiên đặt cùng hàng với tên lớp, tên phương thức.
  • Các toán tử: dấu =, dấu + nên có khoảng cách để dễ đọc hơn.
  • Tên biến Teacher a: code của bạn đơn giản nên không có gì để nói, Tuy nhiên nó gây khó hiểu khi chương trình của bạn có rất nhiều dòng code, bạn sẽ không nhớ được biến a đó là gì. Tốt nhất nên đặt tên có ý nghĩa, chẳng hạn: Teacher teacher = new Teacher();
    Bạn mới bắt đầu học code nên xem Tiêu chuẩn coding (Java Coding Standard) và vừa học vừa áp dụng để hình thành thói quen code tốt hơn.
    Link bạn có thể tham khảo các tiêu chuẩn coding:
    https://gpcoder.com/1775-tieu-chuan-coding-trong-java-coding-standards/
HK boy viết 14:34 ngày 01/10/2018
  • Cặp dấu {}: trong java dấu ngoặc đầu tiên đặt cùng hàng với tên lớp, tên phương thức.

Cái này là coding style của mỗi người, đừng ép uổng nhau.

Quân viết 14:21 ngày 01/10/2018

k phải đâu bạn, trong java thì nó là convention luôn rồi, các nnlt khác thì có thể cho xuống hàng tiếp theo, điển hình là c#

Quân viết 14:32 ngày 01/10/2018

for(int i=0;i<2;i++)
{
a[i]=new Teacher();
a[i]=inp();
System.out.println("===================================");
}

không sao, nhưng đoạn code kia ở hàm main thừa dòng a[i]=new Teacher();. Hiện chắc bạn mới học nên vẫn theo hướng thủ tục, sau học sâu về class thì k nên viết kiểeeur c style như thế này nữa

Giang Phan viết 14:29 ngày 01/10/2018

Cái này tùy vào mỗi người. Tuy nhiên, khi bạn tham gia vào dự án Java thì bạn chắc chắn sẽ phải sử dụng như tôi nói. Nó giống như quy định luôn. Các bạn mới học Java theo tôi nên xem tiêu chuẩn trước, và theo nó, sau này bạn có đi làm hoặc xem code khỏi phải sửa lại.

Quang Minh viết 14:27 ngày 01/10/2018

4rum của mình có tâm quá
Cảm ơn anh @ptgiang56 @hungsteve @qloved @SakaDream @noname00 đã hướng dẫn em trong topic này
Hiện em mới học qua OOP được vài ngày nên chắc chắn sẽ còn nhiều khúc mắc trong tương lai, e mong được mọi người quan tâm giúp đỡ trong thời gian tới
Đặc biệt là lời khuyên của a @ptgiang56 , nếu có thể e sẽ dùng cái chuẩn trình bày đó trong tất cả các ngôn ngữ đã đang và sẽ học trong tương lai nên lời khuyên của a rất hữu ích với e, một lần nữa cảm ơn anh vì điều đó.
Chúc mọi người buổi tối vui vẻ với đống bug của mình

Giang Phan viết 14:23 ngày 01/10/2018

Lúc mới học tôi cũng như bạn, một dù biết coding convention hơi trễ nhưng nó cũng giúp tôi khá nhiều, nên tôi cũng muốn chia sẽ lại với mọi người.
Về tiêu chuẩn tôi trình nói với bạn ở trên, có thể mỗi ngôn ngữ khác nhau, bạn học ngôn ngữ nào nên tìm tài liệu coding convention hay code standard của nó đọc sẽ tốt hơn. Khi bạn nắm được một cái rồi thì những cái khác cũng tương tự, hoặc khác nhau chút ít thôi.

Hung viết 14:21 ngày 01/10/2018

Java coding style của Google:
https://google.github.io/styleguide/javaguide.html

Hồi mình năm nhất thì dường như chỉ có mỗi mình tuân theo convention ngay từ đầu. Vì vậy khi đọc các source code của các bạn sinh viên năm nhất, mình không bắt bẻ lỗi convention. Với lại Khoa cũng không bao giờ xem code của sinh viên. Do đó convention đa số bỏ qua.

Theo quan sát từ các bạn cùng khoá khi bắt đầu xem convention thường có 2 ý kiến: (1) không coi trọng, vì chỉ là sửa tên biến, đặt space, indent cho phù hợp, phân phối code lại, kết quả code dài hơn mà chức năng vẫn y nguyên. (2) quen với thói quen cũ, khó bỏ dù biết convention tốt, học convention xong đến lúc code vẫn code cách cũ.

Tuy nhiên, bạn nên học luôn convention (coding style) ngay từ khi bắt đầu học cú pháp của ngôn ngữ. Điều này đem các lợi ích, mình không nói lợi ích cho team mà lợi ích bản thân:

  • Vẫn có thể đọc code sau một thời gian mà không chửi thầm: sao mình ngu thế, code bẩn, không biết mình viết cái gì nhỉ,…

  • Lợi khi làm bài tập lớn, khi mỗi file lên đến 1000 dòng.

  • Bạn bè đọc code của bạn cảm thấy thoải mái.

  • Đọc source code trên github và các open source dễ dàng. Vì code github và code của bạn đều tuân theo đúng coding style, nên xem code của open source cảm giác như chính mình viết. (*)

Đọc được code (*) là ưu điểm rất lớn. Bạn hiểu càng nhiều bộ code của các framework, thư viện nổi tiếng. Trình độ của bạn càng cao. Thay vì bạn phải làm, tự rút kinh nghiệm cải tiến qua từng năm. Giờ bạn chỉ cần đọc code của 1 expert, thì code của bạn viết ra sau này cũng gần expert.

Bài liên quan
0