Hỏi về việc in ra trong java

em có làm 1 bài về từ điển nhưng nó không chạy, nên em làm 1 bài nháp chỉ nhập vào in ra, nhưng không hiểu sao nó bỏ qua kí hiệu đầu ạ, code em

import java.util.Scanner;
class n00B {
    String  a;
    String b;

    public String  getB() {
        return b;
    }

    public String getA() {
        return a;
    }

    n00B(String a, String b)
    {
        this.a = a;
        this.b = b;
    }

    void inra()
    {
        System.out.println("|"+a+"         |"+b);
    }
}

class mang {
    n00B[] as = new n00B[10];
}
class nhap {
    String  a;
    String b;
    int size;
    Scanner input = new Scanner(System.in);

    void get(mang m)
    {
        size = input.nextInt();
        for (int i = 0; i < size; i++) {
            a = input.nextLine();
            b = input.nextLine();
            m.as[i] = new n00B(a, b);
        }
    }
}
public class test {
    public static void main(String[] args)
    {
        mang mk = new mang();
        nhap in = new nhap();
        in.get(mk);
        for (int i = 0; i < in.size; i++) {
            mk.as[i].inra();
        }
    }
}

với cả cho em hỏi ví dụ mình có 2 class, 1 class có biến size,size đó mình input, thì nếu mình gọi int bên class khác nó sẽ là 0 hay là trả về size input ạ, vì trong cái từ điển của em nó không in ra gì cả


em cảm ơn mọi người nhiều ạ

Giá trị đầu tiên không có do phương thức nextInt() trước đó.
Khi nhập giá trị size bạn nhấn “Enter”, nextInt lấy được số, sau đó đoạn a = input.nextLine(); sẽ vẫn nhận dòng mà bạn “Enter” trước đó, do nextInt() đã lấy giá trị rồi nên các giá trị còn lại của dòng là trống “” => a = "";

Bạn thử nhập như sau:

3 aa <-- Dấu cách.
bb
cc
dd
ee
ff
3 Likes

Nếu bạn dùng getter thì nó sẽ trả về size mà đã nhập nhé.

3 Likes

em cảm ơn mọi người ạ

em vẫn không hiểu sao em không thể in ra được trong class khác nhau ạ,
class nhập của em

        public class DictionaryCommandline {
        public void showAllWords(Dictionary dr)
        {
              DictionaryManagement newdr_m=new DictionaryManagement();
              System.out.println("No     | English     | Vietnamese");
             for(int i=0;i<newdr_m.getSize();i++)
              {
                  System.out.print(i+1);
                  dr.newWord[i].inra();
              }
        }
    }

còn đây hàm nhập em

        public class DictionaryManagement {
        Scanner input = new Scanner(System.in);
        String tiengAnh;
        String dich;
        Dictionary dr = new Dictionary();
        int size;

        public int getSize() {
            return size;
        }

        public void insertFromCommandline()
        {
            int size = input.nextInt();
            input.nextLine();
            for (int i = 0; i < size; i++) {
                tiengAnh = input.nextLine();
                dich = input.nextLine();
                dr.newWord[i]=new Word(tiengAnh,dich);
            }
        }
    }

Đăng tất cả Class lên, với cả đọc qua thì thấy mấy cái class của bạn rối rắm quá, nhiều cái không cần thiết !


Đăng code lên thì nhớ markdown nữa !

1 Like

không phải ạ, do đề yêu cà thế ạ, đây là tất cả của em, em bỏ vào 1 cái

class Word {
    private String wordTarget;
    private String wordExplain;

    Word(String word1, String wordEx) {
        this.wordTarget = word1;
        this.wordExplain = wordEx;
    }

    public String getWordTarget() {
        return this.wordTarget;
    }

    public String getWordExplain() {
        return this.wordExplain;
    }

    void inra() {
        System.out.println("|     " + wordTarget + "     | " + wordExplain);
    }
}
class Dictionary {
    Word[] newWord = new Word[1000];
}
import java.util.Scanner;

class DictionaryManagement {
    Scanner input = new Scanner(System.in);
    String tiengAnh;
    String dich;
    int size;

    public int getSize() {
        return size;
    }

    public void insertFromCommandline(Dictionary dr) {
        int size = input.nextInt();
        input.nextLine();
        for (int i = 0; i < size; i++) {
            tiengAnh = input.nextLine();
            dich = input.nextLine();
            r.newWord[i] = new Word(tiengAnh,dich);
        }
    }
}
class DictionaryCommandline {
    public void showAllWords(Dictionary dr) {
        DictionaryManagement newdr_m = new DictionaryManagement();
        System.out.println("No | English | Vietnamese");
        for(int i = 0;i < newdr_m.getSize(); i++) {
            System.out.print(i + 1);
            dr.newWord[i].inra();
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Dictionary dic = new Dictionary();
        DictionaryManagement d = new DictionaryManagement();
        d.insertFromCommandline(dic);
        DictionaryCommandline dc = new DictionaryCommandline();
        dc.showAllWords(dic);
    }
}

em không hiểu sao của em nó không in ra ấy ạ, như nó không nhận cái dictionary

merged and moved by noname00

1 Like

Phát hiện 2 chỗ sai trầm trọng:

1

// DictionaryManagement
    public int getSize() {
        // Ở đây
        return size;
    }

    public void insertFromCommandline(Dictionary dr) {
        // Và đây
        int size = input.nextInt();
        input.nextLine();
        for (int i = 0; i < size; i++) {
            tiengAnh = input.nextLine();
            dich = input.nextLine();
            r.newWord[i] = new Word(tiengAnh,dich);
        }
    }

Khai báo size của lớp mà không dùng, vào phương thức khai báo lại. this.size vô dụng.

2

class DictionaryCommandline {
    public void showAllWords(Dictionary dr) {
        // Ở đây
        DictionaryManagement newdr_m = new DictionaryManagement();
        System.out.println("No | English | Vietnamese");
        // Và đây newdr_m.getSize()
        for(int i = 0;i < newdr_m.getSize(); i++) {
            System.out.print(i + 1);
            dr.newWord[i].inra();
        }
    }
}

Cho dù 1 có sửa lại đúng thì 2 này lại làm cho size vô dụng thêm lần nữa.
Tạo đối tượng mới, lấy giá trị của đối tượng đó (đang = 0) thực hiện tính thay cho đối tượng khác.

Phải nói muốn lấy được thằng size phải “vượt” qua “2 lớp bảo mật”.



Đóng góp hướng làm cho bạn:

  • Thay vì dùng mảng (tĩnh - cố định), bạn có thể dùng ArrayList (động). Dùng nó trong lớp Dictionary hoặc kết thừa nó luôn cho tiện.
Động!?

Thực ra mảng động là tạo mảng mới với kích thước khác. :smiling_imp:

class Dictionary extends ArrayList<Word>{
// Hờ hờ
}

ArrayList.size() trả về số lượng phần tử hiện tại.

  • Các phương thức nhập/xuất từ CMD thì nên gom thành 1 lớp cho gọn, cứ mỗi thằng 1 lớp làm gì cho rắc rối.
// Word
...

// Dictionary
...

// DictionaryUtils
// Các phương thức nhập/xuất từ CMD ở lớp này
...
2 Likes

em cảm ơn a, em sẽ sửa lại

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?