cuốn sách gpt4 ai đã làm

java - Sự cố không giải thích được khi trao đổi giá trị trong hai mảng

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 19:15:30 25 4
mua khóa gpt4 Nike

Xin chào, tôi đã cố gắng tìm ra lỗi này trong chương trình của mình được vài giờ và tôi có thể xác định rằng nó tồn tại. Tôi sẽ không ngồi đây và giải thích chương trình của tôi phải làm gì, vì tôi đã tạo lại nó với càng ít mã càng tốt để sao chép lỗi, mã này chỉ hoán đổi giá trị của hai mảng và để đơn giản, tôi đã thực hiện các mảng chỉ chứa giá trị A, mảng1 có giá trị là 1 và mảng2 có giá trị là 2.

Bất cứ khi nào dòng bình luận "BUGGED" được kích hoạt thay vì đầu ra ở trên, đầu ra sẽ như sau:

Trước khi trao đổi: giá trị đầu tiên: [1] giá trị thứ hai: [2] sau khi trao đổi: giá trị đầu tiên: [2] giá trị thứ hai: [2]

Nếu bạn sử dụng dòng đầu tiên, kết quả đầu ra là chính xác (sau khi hoán đổi: 2 1).

Tôi nên nói thêm rằng nếu tôi tạo nhiều mảng (thực tế là bất kỳ số nào), lỗi chỉ xuất hiện ở giá trị đầu tiên và cuối cùng.

Ví dụ: nếu tôi tạo 4 mảng có giá trị 1, 2, 3 và 4 và thử hoán đổi

nhiệt độ < 1 < 2 < 3 < 4 < nhiệt độ 

Cuối cùng tôi kết thúc với điều này: 2,3,4,2.

Đây là mã cho lớp chính.

Kiểm tra lớp {

int[] one = {1};
int[] two = {2};

TestArray array1 = newTestArray(one);
TestArray array2 = newTestArray(two);

public static void main(String[] args) {

Kiểm tra thử nghiệm = Thử nghiệm mới();

System.out.println("Trước khi trao đổi:");
System.out.println("Giá trị đầu tiên: "+Arrays.toString(test.getArray1()));
System.out.println("Giá trị thứ hai: "+Arrays.toString(test.getArray2()));

test.swap();

System.out.println("Sau khi trao đổi:");
System.out.println("Giá trị đầu tiên: "+Arrays.toString(test.getArray1()));
System.out.println("Giá trị thứ hai: "+Arrays.toString(test.getArray2()));

}

int[] getArray1() {
trả về array1.getArray();
}

int[] getArray2() {
trả về array2.getArray();
}
hoán đổi khoảng trống () {

int[] temp = array1.getArray();
array1.setArray(array2.getArray());
array2.setArray(temp);
}

}

Đây là bài học thứ hai.

lớp công khai TestArray {

riêng tư int[] mảng = new int[1];

Kiểm traArray (giá trị int []) {

this.array = giá trị;
}

int[] getArray() {
mảng trả về;
}

void setArray(int[] mảng) {
this.array = mảng;
// this.array[0] = array[0]; // LỖI
}
}

Thực sự mong chờ câu trả lời của bạn, tôi thực sự bối rối.

câu trả lời hay nhất

Vấn đề nằm ở phương pháp tráo đổi() trong của bạn nhiệt độ Biến là mảng1 tham khảo thay vì sao chép Nếu bạn muốn thay đổi các giá trị trong mảng thì nó sẽ như thế này:

void swap() {//ví dụ: arr1 → {1}, arr2 → {2}
int[] temp = array1.getArray(); //arr1 → {1} ← temp, arr2 → {2}
array1.setArray(array2.getArray()); //arr1 → {2} ← tạm thời, arr2 → {2}
array2.setArray(temp); //arr1 → {2} ← temp, arr2 → {2} / không thay đổi
}

Như bạn có thể thấy, khi bạn gọi mảng1.setArray(array2.getArray()) khi bạn cũng thay đổi nhiệt độ các giá trị vì chúng tham chiếu đến cùng một mảng.

Những gì bạn nên làm là:

hoán đổi khoảng trống () {
int[] temp = Arrays.copyOf(array1.getArray(), array1.getArray().length); //arr1 → {1}, temp → {1}, arr2 → {2}
array1.setArray(array2.getArray()); //arr1 → {2}, temp → {1}, arr2 → {2}
array2.setArray(temp); //arr1 → {2}, temp → {1}, arr2 → {1}
}

Bạn có thể đọc thêm về biến tham chiếu và biến nguyên thủy trong Java.

Về java - vấn đề không giải thích được khi trao đổi giá trị trong hai mảng, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36346755/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress