Как мне сначала поместить общую сумму простых чисел, а затем простые числа под ней

#java #loops #numbers

#java #циклы #числа

Вопрос:

В настоящее время я использую этот код, и я пытаюсь вывести общую сумму того, сколько простых чисел сначала, а затем список простых чисел

Вот мой код:

 import java.util.*;

public class PrimeTime {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int r, s = 0;
        
        System.out.print("Input number: ");
        r = sc.nextInt();
        
        System.out.println();
        
        for (int i = 2; i < r; i  ) {
            
            int f = 0;
            
            for (int j = 2; j < i; j  ) {
                
                if (i%j == 0)
                    f = 1;
            }
            
            if (f == 0) {
                
                System.out.print(i  " ");
                s = s  1;
            }
            
        }
        System.out.println("N ="  s);
    }
    
}
  

Это результат, который я получаю:

 Input number: 10

2 3 5 7 N = 4
  

Но я ищу этот результат:

 Input number: 10

N = 4
2 3 5 7
  

Я не знаю, как, я попытался поместить S.O.P в разные места, и я не могу понять, как.

Комментарии:

1. Вероятно, вы захотите добавить найденные простые числа в какую-то структуру, такую как an ArrayList<Integer> , и распечатать их в цикле в конце.

2. Вы вычисляете N на лету, а затем печатаете его. Вам нужно рассчитать это заранее и сделать print оператор перед запуском for цикла

Ответ №1:

Если вы хотите отобразить N = 4 раньше 2 3 5 7 , вы можете добавить числа (т. Е. 2 3 5 7 ) к a StringBuilder и распечатать то же самое после печати N = 4 , например

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int r, s = 0;
        StringBuilder numbers = new StringBuilder();

        System.out.print("Input number: ");
        r = sc.nextInt();

        System.out.println();

        for (int i = 2; i < r; i  ) {
            int f = 0;

            for (int j = 2; j <= Math.sqrt(i); j  ) {

                if (i % j == 0)
                    f = 1;
            }

            if (f == 0) {
                numbers.append(i).append(' ');// Append to StringBuilder instead of printing
                s = s   1;
            }
        }
        System.out.println("N ="   s);
        System.out.println(numbers);
    }
}
  

Пример запуска:

 Input number: 10

N =4
2 3 5 7 
  

Примечание: для проверки простоты достаточно проверить до Math.sqrt(i) , т.Е. Вы должны заменить j < i на j <= Math.sqrt(i) .

Ответ №2:

Вы можете сохранить числа в списке, а затем распечатать их после завершения цикла
Не волнуйтесь, если вы еще не изучили списки, потому что вам все равно скоро придется.

вот код:

  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    int r, s = 0;
    LinkedList<Integer> list = new LinkedList<>();

    System.out.print("Input number: ");
    r = sc.nextInt();

    System.out.println();

    for (int i = 2; i < r; i  ) {

        int f = 0;

        for (int j = 2; j < i; j  ) {

            if (i%j == 0)
                f = 1;
        }

        if (f == 0) {

            //System.out.print(i  " ");
            list.add(i);
            s = s  1;
        }

    }
    System.out.println("N = "  s);

    for(int i = 0; i<list.size(); i   ) {
        System.out.print(list.get(i)   " ");
    }
}