Построение Java-программы, которая читает числа и говорит, что она проста или перечисляет ее факторы - PullRequest
1 голос
/ 25 февраля 2012

Цель моего конкретного проекта - написать программу, которая предложит пользователю ввести два целых числа.Программа прочитает два целых числа и решит, простые они или нет.если они не совпадают, программа перечислит факторы, в противном случае она просто выведет «простое число» и повторно запросит у пользователя два целых числаТакже программа должна вывести коэффициенты всех чисел между двумя заданными целыми числами, а также сами целые числа.Это также даст среднее значение простых чисел.

Цель - сделать так, чтобы конечный результат выглядел следующим образом (при условии, что два целых числа равны 6 и 11):

Please enter two integers: 6 11
6: 2 3
7: Prime
8: 2 4
9: 3
10: 2 5
11: Prime
There are three prime numbers
The average value of the prime numbers is 9.00

Пожалуйста, введитедва целых числа:

Так вот мой код:

import java.util.Scanner;

public class Prime {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int r1, r2, i, c = 0;

System.out.println("Please enter two integers : ");
int num1 = input.nextInt();
int num2 = input.nextInt();
while (num1 > 0 && num2 > 0)
{

for (i = 2; i < num1; i++) {
r1 = num1 % i;
r2 = num2 % i;
if (r1 == 0 && r2 == 0)
    System.out.println("Prime");
{


System.out.println(i+ "\t");
c++;

}

}
if (c == 0)
System.out.println("Prime");
System.out.print("Please enter two integers : ");
num1 = input.nextInt();
num2 = input.nextInt();



}
}}

И это мой вывод при вводе 6 и 11:

Please enter two integers : 
6 11
2   
3   
4   
5   
Please enter two integers : 

Теперь я понятия не имею, где я пошел не так, но я чувствую, что должен идти в правильном направлении.Если оба входа просты, будет напечатано простое число.Если кто-то прост, а кто-то нет, он будет делать то, что я написал выше.Спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Ну, я просто кратко оглядываюсь, но ваша проблема лежит в цикле for. Вы начинаете я с 2, что разумно для проверки факторов. Затем вы одновременно проверяете, делятся ли num1 и num2 на i (на этом этапе 2). Если они есть, вы печатаете «Prime». Затем вы повторяете и делаете это снова. Подумайте об этом внимательно: насколько это соответствует тому, что вы думаете / думали, что делаете?

Если бы мне пришлось угадывать, вы пропускаете строку else после

if (r1 == 0 && r2 == 0)
    System.out.println("Prime");
{

А также условие "если", вероятно, должно быть отменено: if (!(r1 == 0 || r2 == 0)). Этого должно быть как минимум достаточно, чтобы вы пошли в правильном направлении.

Удачи!

0 голосов
/ 25 февраля 2012

Намного более короткий способ сделать.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static List<Integer> primeFactors(int numbers) {
        int n = numbers; 
        List<Integer> factors = new ArrayList<Integer>();
        for (int i = 2; i <= n / i; i++) {
            while (n % i == 0) {
                factors.add(i);
                n /= i;
            }
        }
        if (n > 1) {
            factors.add(n);
        }
        return factors;
    }

    public static void main(String[] args) 
    {
        System.out.println("Please enter two integers : ");
        Scanner input = new Scanner(System.in);
        int num1 = input.nextInt();
        int num2 = input.nextInt();
        List<Integer> primenos = new ArrayList<Integer>();
        List<Integer> result;
        for(int i=num1; i<=num2; i++)
        {
            result = primeFactors(i);
            System.out.print(i +":");
            if(result.size()==1 && result.get(0)==i)
            {
                System.out.println(" prime");
                primenos.add(i);
            }
            else
            {
                for (Integer j : result) {
                    System.out.print(" "+j);
                }
            }
            System.out.println();
        }
        System.out.println("There are "+primenos.size()+" prime numbers");
        int total = 0;
        for(Integer j : primenos)
        {
            total+=j;
        }
        System.out.println("The average value of the prime numbers is "+total/primenos.size());
    }
}

Это всего лишь один из способов сделать это.Вы можете найти сотни алгоритмов, если вы Google.Найдите его и измените под свои нужды.

...