01/10/2018, 17:24

Hàm get trong mảng số nguyên không hoạt động đúng

This post was flagged by the community and is temporarily hidden.

Nguyen Kien viết 19:28 ngày 01/10/2018

xác định lại giá trị trả về đi bạn. Muốn trả về arrays thì khai báo một arrays và cấp phát số ô nhớ cho nó sau đó mới return, còn về kiểu primitive data thì trả về bình thường thôi !

Minh Tiến Phan viết 19:27 ngày 01/10/2018

Cảm ơn bạn nhưng mình chưa hiểu lắm, mình đang viết hàm set trong class array và mình muốn khi gọi hàm set ở hàm main thì sẽ hiện ra phần từ được set nhưng lại k đc bạn ơi

Nguyễn Nam viết 19:30 ngày 01/10/2018

return new Integer(a[y]);
bạn viết là hàm get mà hàm set không trả về giá trị mà nó gán giá trị mà bạn

Trương Tấn Phát viết 19:38 ngày 01/10/2018

nhưng k hiện ra kết quả

Muốn hiện kết quả thì phải System.out.println(a[y]); hoặc System.out.println(get(y)); chứ.

Minh Tiến Phan viết 19:28 ngày 01/10/2018

mình khai báo kiểu trả về integer nên bth muôn trả ra kết quả thì phải return kết quả ấy ra đó b, còn cách của bạn thì mình khai báo kiểu void bth

Minh Tiến Phan viết 19:30 ngày 01/10/2018

là sao mình chưa hiểu lắm, bạn có thể giải thích rõ hơn giúp mình đc k

Ngoclong Pham viết 19:32 ngày 01/10/2018

Integer

up cả code lên đi bạn

Ngoclong Pham viết 19:33 ngày 01/10/2018

nó không in ra vì bạn không có lệnh in thôi.
thêm đoạn :
System.out.println(a[y]);
vào trước return thì nó mới in ra chứ.

Hung viết 19:40 ngày 01/10/2018

Em nên tham khảo cách ArrayList gọi phần tử qua get(index) như thế nào. Nói chung mò code của ArrayList cũng dễ, mò tí là ra rồi.

Đầu tiên là đoạn code method get(int index), gọi tới 2 methods là rangeCheck()elementData().

  • rangeCheck() kiểm tra index có hợp lệ không.
  • nếu index hợp lệ, không có exception thì chạy lệnh tiếp theo elementData(), trả về phần từ vị trí index.
/**
  * Returns the element at the specified position in this list.
  *
  * @param  index index of the element to return
  * @return the element at the specified position in this list
  * @throws IndexOutOfBoundsException {@inheritDoc}
  */
public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

rangeCheck() kiểm tra index có hợp lệ, theo javadocs thì tính hợp lệ là index >= 0index < size, với size là số phần tử ArrayList đang sở hữu. Tuy nhiên, code chỉ kiểm tra trường hợp index >= size với message được trả về từ hàm outOfBoundsMsg().

/**
  * Checks if the given index is in range.  If not, throws an appropriate
  * runtime exception.  This method does *not* check if the index is
  * negative: It is always used immediately prior to an array access,
  * which throws an ArrayIndexOutOfBoundsException if index is negative.
  */
private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

outOfBoundsMsg() rất đơn giản, trả về String chứa thông tin index và số lượng phần tử ArrayList, là message cho exception ở rangeCheck().

/**
  * Constructs an IndexOutOfBoundsException detail message.
  * Of the many possible refactorings of the error handling code,
  * this "outlining" performs best with both server and client VMs.
  */
private String outOfBoundsMsg(int index) {
    return "Index: "+index+", Size: "+size;
}

Tại elementData() mới là bước trả về phần tử, đơn giản là sử dụng toán tử truy xuất phần tử mảng elementData[index]. Có một trick được sử dụng ở đây. Nếu index < 0 thì tự động throw ArrayIndexOutOfBoundsException khi truy xuất bằng [index]

@SuppressWarnings("unchecked")
E elementData(int index) {
    return (E) elementData[index];
}

Cuối cùng là field cùng tên với method elementData, là array của Object.

/**
  * The array buffer into which the elements of the ArrayList are stored.
  * The capacity of the ArrayList is the length of this array buffer.
  */
private transient Object[] elementData;

Source code: http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/00cd9dc3c2b5/src/share/classes/java/util/ArrayList.java


Có gì đó sai sai

em tạo mảng số nguyên và em viết hàm set như này(trong java) k biết sai chổ nào

public Integer get(int y) { // hien thi phan tu duoc goi
Bài liên quan
0