Tôi đang in 2 dòng cho bảng điều khiển. Cả hai đều in, nhưng khi chữ thứ hai được in, chữ cái thứ nhất sẽ thay đổi thành chữ thứ hai, vì vậy 2 dòng giống hệt nhau. Tôi chưa bao giờ gặp điều này trước đây. Tại sao bản in thứ hai ghi đè lên bản in đầu tiên và cách khắc phục nó?Hệ thống in println
public static void main(String args[]){
new MergeSort(90000);
System.out.println("Array to be mergesorted: " +Arrays.toString(array));
long start = System.currentTimeMillis();
mergeSort(array, 1, array.length);
long end = System.currentTimeMillis();
System.out.println("Result: " + Arrays.toString(array));
}
Các constructor:
public MergeSort(int n){
Random rand = new Random();
array = new int[n];
for(int i = 0; i <array.length; i++){
array[i] = rand.nextInt(101);
}
}
Phần còn lại của mã:
public static void merge(int[] A, int p, int q, int r){
//
//length of subarray 1
int n1 = q-p+1;
//length of subarray 2
int n2 = r-q;
int[] L = new int[n1+1];
int[] R = new int[n2+1];
for(int i = 0; i < n1; i++){
L[i] = A[p+i-1];
}
for(int j=0; j< n2; j++){
R[j] = A[q+j];
}
L[n1] = Integer.MAX_VALUE;
R[n2] = Integer.MAX_VALUE;
int i = 0;
int j = 0;
for(int k = p-1; k < r; k++){
if(L[i] <= R[j]){
A[k] = L[i];
i++;
}
else{
A[k] = R[j];
j++;
}
}
}
public static void mergeSort(int[] A, int p, int r){
if (p<r){
int q = (int) Math.floor((r+p)/2);
mergeSort(A, p, q);
mergeSort(A, q+1, r);
merge(A, p, q, r);
}
}
Phương thức khởi tạo 'MergeSort' của bạn làm gì với' MergeSort (90000) 'mới? Và, lệnh 'mergeSort (array, 1, array.length)' của bạn làm gì? –
@ElliottFrisch Mã bạn yêu cầu hiện đã được thêm vào. – Jesper
Tôi * đề nghị * bạn hãy thử một trình gỡ lỗi. –