Saya memiliki sesuatu seperti ini:
int f = 120;
for(int ff = 1; ff <= f; ff++){
while (f % ff != 0){
}
Apakah ada yang salah dengan perulangan saya untuk menemukan faktor? Saya benar-benar bingung dengan cara kerja pernyataan for dan while, jadi kemungkinan besar mereka benar-benar salah.
Setelah ini, bagaimana saya akan menugaskan variabel-variabel ke faktor-faktor tersebut?
Tidak ada yang salah dengan perulangan Anda, tetapi perulangan while adalah hal yang salah untuk digunakan di sini.
Logika dari perulangan for
Anda adalah:
ff
ke 1.ff <= f
.for
, tambahkan 1 ke ff
.Ini kelihatannya persis seperti yang Anda inginkan.
Namun, perulangan while
tidak benar. Ini akan terus melakukan kode apa pun yang Anda tulis di sana selama ff
adalah faktor dari f
, jadi kecuali jika Anda mengubahnya di while
kode, Anda akan mendapatkan loop yang tak terbatas. Namun, mengubahnya menjadi pernyataan ifif
akan memberikan apa yang Anda inginkan.
Karena anda memeriksa faktor, anda tidak perlu memeriksa semua kemungkinan sampai f - hanya sampai akar kuadrat dari f. Setiap kali anda menemukan bahwa ff
adalah faktor, keluarkan kedua ff
dan f/ff
sebagai faktor, kecuali jika f
adalah bilangan kuadrat.
Sepertinya anda tidak akan melakukan sesuatu dengan f
atau ff
dalam perulangan while anda? Jika demikian, ekspresi f%ff != 0
adalah salah (dan kemudian akan pergi ke perulangan berikutnya dalam perulangan for), atau benar, dan itu akan berakhir dalam perulangan tak terbatas.
Apakah Anda yakin Anda memerlukan while seperti ini?
Solusi yang sedikit dimodifikasi: Pertama-tama anda dapat memeriksa apakah variabel x dapat dibagi oleh variabel y. Jika ya, kita akan menghitung 1 dan akan mengulangi proses ini. Untuk penghitung perulangan, x/y digunakan dan anda harus mengecek x>0 untuk menghindari pengulangan ketika x menjadi nol tetapi perulangan belum selesai.
public class Factor {
public static void main(String[] args) {
int x = 48;
int x1 = x;
int y = 2;
int k = x / y;
int j = 0;
for (int i = 1; i < k; i++) {
if ((x % y) == 0 && x > 0)
j++;
x = x / 2;
}
System.out.println(+x1 + " is a factor of " + y + " for " + j
+ " times.");
}
}