I want my program to take an integer and put every prime number up to that integer into an ArrayList. Logically I can’t find why it doesn’t work.
import java.util.ArrayList;
public class primenumbers {
public static void main(String[] args) {
int totalNumber = 1000;
ArrayList<Integer> numbers = new ArrayList<>();
for(int i = 1; i <= totalNumber; i++){
boolean isPrime = true;
for(int j = i-1; j >= 1; j--){
if (i % j == 0){
isPrime = false;
}else if(isPrime = true){
numbers.add(i);
}
}
}
System.out.println(numbers);
}
}
What it ends up doing is putting every number up to 1000 repeatedly into the list and printing it out. The nested for loop checks against every number smaller than the original for loop and checks if it has a remainder. I would think that would work as a prime check.
>Solution :
You have two bugs. One is testing i % 1 == 0 when j = 1 because your loop test was j >= 1 – should have been j > 1. Second was testing isPrime before your primality test is complete (and with an unfortunate typo }else if(isPrime = true){ assigns true to isPrime and evaluates to true, use if(isPrime) or if(isPrime == true) if you must – it still needs to be tested after you loop through all i % j tests). Fixing that, should look something like
public static void main(String[] args) {
int totalNumber = 1000;
ArrayList<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= totalNumber; i++) {
boolean isPrime = true;
for (int j = i - 1; j > 1; j--) {
if (i % j == 0) {
isPrime = false;
}
}
if (isPrime) {
numbers.add(i);
}
}
System.out.println(numbers);
}
And I then get
[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]