đó là bài viết đầu tiên của tôi vì vậy DO stomp tôi nếu tôi đã viết một cái gì đó ngu ngốc.Danh sách các ước của một số
Tôi vừa mới bắt đầu lớp học CNTT, và ngày hôm nay trên "trong khi" vòng lớp gia sư của tôi đã cho chúng tôi những bài tập sau đây:
Viết một chương trình mà đọc một số tự nhiên n và hiển thị trong một hộp đồ họa tất cả số chia của nó từ khoảng [2; n-1].
Cho đến nay tôi đã đưa ra một mã mà làm việc nhưng kết quả là một sai lầm chút:
import java.util.Arrays;
import javax.swing.JOptionPane;
public class Divisors {
public static void main(String[] args) {
String n = JOptionPane.showInputDialog(null, "Enter a natural number");
Integer i = Integer.parseInt(n);
int d = i - 1;
int x = 2;
int[] dvr = new int[i]; // [i] because bigger numbers need more iterations
while (x >= 2 && x <= d) {
double y = i % x;
if (y == 0) {
dvr[x] = x;
x = x + 1;
} else {
x = x + 1;
}
}
JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + Arrays.toString(dvr));
}
}
Vấn đề là vòng lặp lấp đầy mảng với rất nhiều zero, và ảnh chụp màn hình của kết quả của người dạy kèm cho thấy một cửa sổ liệt kê chỉ các ước số.
Tôi đã cố gắng làm điều này với ArrayList, nhưng đó là ma thuật đen cho tôi ngay bây giờ và gia sư của tôi đã không dạy chúng tôi cách sử dụng bất cứ thứ gì ngoài những thứ được sử dụng trong mã của tôi.
Bất kỳ trợ giúp nào được đánh giá cao.
Trên thực tế, mảng được khởi tạo cho tất cả các số không khi bạn tạo ra nó, vòng lặp của bạn không được làm đầy nó lên với số không . – azurefrog
Vấn đề của bạn là với dvr [x] = x; Bạn không muốn đặt giá trị của số chia ở vị trí x. Bạn cần một biến thứ hai để lập chỉ mục vào mảng của bạn mà bạn chỉ tăng sau mỗi số chia mà bạn thêm vào. – bhspencer
@bhspencer nhưng tôi vẫn có một số vị trí được xác định trước trong mảng – Shamanix