01/10/2018, 14:34
Logic error code java
đề bài: Nhập số liệu cho dãy số thực a0 , a1 ,…, an-1 và một giá trị thực x. Giả sử dãy a đã được sắp xếp theo thứ tự tăng dần. Hãy chèn giá trị x vào dãy a sao cho vẫn giữ được tính sắp xếp của mảng.
đây là code của em. Nhưng nó lỗi từ dòng 28 và nó k chạy, ai biết chỉ em với…
package daycon;
import java.util.Scanner;
public class Daycon {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Nhập n: ");
int n = scanner.nextInt();
System.out.println("Nhập x: ");
int x = scanner.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {
System.out.println("Nhập a[i]: ");
a[i] = scanner.nextInt();
}
for (int i = 0; i < n; i++) {
if (x < a[i + 1] && x > a[i]) {
int k = i + 1;
System.out.println(k + " " + i);
System.out.println(n);
for (int j = n; j > k; j--) {
a[j] = a[j - 1]; //Dịch các phần tử sang phải 1 vị trí
a[k] = x;
System.out.println(a[k]);
}
n++;
System.out.println(n);
}
}
for (int i = 0; i < n; i++) {
System.out.println(a[i] + " ");
}
}
}
Bài liên quan
Hình như đây không phải là lần đầu mình nhắc bạn thêm category vào topic. Thêm vào mau lên đi :v
Dòng 28 là dòng nào?
Đoạn
vứt ngay ra ngoài vòng for j ngay.
ơ, em biết category vào như nào đâu -_- , nó k chạy từ for(j) ấy ạ :v
không đc đâu, em test kiểu này rồi bác ơi
Khai báo mảng a có mỗi n phần tử, thế mà đòi dịch phần tử ra phần tử a[n]
thì dịch thế quái nào được.
Mình biết. Vứt đoạn đấy ra ngoài for không ảnh hưởng gì mấy, nhưng về logic tư duy thì đưa ra ngoài for đúng hơn.
ơ, em thấy code C làm đc tưởng java cũng thế -_-
C != Java mà.
20 char.
vẫn lỗi và em chưa biết sửa thế nào -_-
Lỗi thế nào hả bạn? Bạn post lên đi chứ.
Còn chỗ này nữa.
Nếu x > a[n-1] thì sao? Nếu x < a[0] thì sao? Nếu x nằm giữa a[0] và a[n] thì sao?
Không phải cứ muốn x nằm giữa khoảng 2 phần tử liên tiếp là được.
Vòng lặp i quên chưa break kìa :v cho nên code sẽ chạy đến i = n-1 -> truy cập vào a[i+1] = a[n] -> lỗi.
em cũng biết còn chặn đầu chặn đuôi cơ mà khúc giữa chưa ffix xong nên chưa nghĩ tới
Tại bạn không nắm rõ code flow nên dễ gặp bug kiểu này. Lần sau đọc code cho kĩ.
Uploading… thêm break; nó ra thế này đây bác ơi :V
còn cái vòng lặp i, em cho nó x < a[i + 1] && x > a[i] tức là nó chỉ chạy đc 1 lần rồi mà nhỉ
Up lại hình đi.
Vòng lặp sẽ đến khi nào tìm được chỗ cho x thì break mà.
Up lại cả code lên đây.
package daycon;
import java.util.Scanner;
public class Daycon {
}
Sau khi tìm ra và chèn xong thì phải break chứ nhỉ, có một phần tử thôi. Viết vậy không rõ ràng.[quote=“Monochorme, post:6, topic:63232, full:true”]
ơ, em thấy code C làm đc tưởng java cũng thế -_-
[/quote]
Trong C/C++ không phải câu nào dịch được cũng có nghĩa (như bạn nghĩ) đâu. Đó chính là khái niệm undefined.
Nếu tìm được chỗ để nhồi x vào giữa thì mới break được chứ -> break phải nằm trong if chứ
Bạn phải nắm được bạn đang code cái gì chứ