нет вывода при вычислении простого числа - PullRequest
3 голосов
/ 18 февраля 2012

Я хочу напечатать первые 100 простых чисел. Итак, я создал массив int 100. Я добавил сначала простое число, bag [0] = 2, затем для следующих чисел я попытался написать алгоритм. Он начинается с 3 и продолжается до тех пор, пока массив не будет заполнен. Каждое число определяется так, если оно является простым по тому, делится ли оно на предыдущие элементы в массиве, и если оно является простым, то оно будет добавлено в массив.

вот мой код:

public class Trial02 
{   
    public static void main( String[] args) 
    {       
        int[] bag = new int[100];
        bag[0] = 2; //first element of prime array
        int valid = 1;
        int i;
        boolean result = true;
        String str = "";

        //starting from 3 it checks if a number is prime until array is full
        for( i=3; valid<bag.length; i++)
        {
            //it checks if previous primes in array are divisible by current number until coming to current number
            for(int k=0; k<valid; k++)
            {
                if( i % bag[k] == 0)
                    result = false;
            }

            if( result == true) //if it is prime it is added to array
            {
                bag[valid] = i;
                valid ++;
            }
        }

        //printing results
        for(int m=0; m < bag.length; m++)
            str = str + bag[m] + " ";
        System.out.println("zaa xd");
        System.out.println(str);
    }

}

но это не дает никакого вывода, просто пустое. Я не мог найти, где моя ошибка. Заранее спасибо.

Ответы [ 5 ]

2 голосов
/ 18 февраля 2012

Самая очевидная ошибка в том, что ваш boolean result = true; находится вне цикла: после установки на false он никогда не возвращается на true. Вы не видите никакого вывода, потому что ваша программа никогда не останавливается.

В качестве примечания, вам не нужно проверять все простые числа вплоть до последнего, который вы обнаружили: выможет остановиться, как только вы достигнете квадратного корня из простого кандидата, то есть i*i > bag[k].Вы не заметите никакого эффекта, если ваш лимит равен 100, но если вы попробуете 100000, это поможет намного больше.

2 голосов
/ 18 февраля 2012

Похоже, вам нужно сбросить result = true; внутри первого for цикла. Ваш код как отправленный устанавливает result = false, а затем никогда не меняет его.

2 голосов
/ 18 февраля 2012

На самом деле вы никогда не проверяете, является ли число простым или нет (result нигде не установлено полезным)

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

Ваша логика для определения первых 100 простых чисел неверна.И количество логических ошибок присутствует, как указано другими.Я переписал ваш код, но не проверял.Я думаю, это будет работать:

public class Trial02 
{   
    public static void main( String[] args) 
    {       
    int[] bag = new int[100];
    bag[0] = 2; //first element of prime array
    int valid = 1;
    int i;
    boolean isPrime = true;
    String str = "";

    //starting from 3 it checks if a number is prime until array is full
    for( i=3; valid<bag.length; i++)
    {
        isPrime = true;
        for (int k = 2; k < i; k++)
        {
            if (i % k == 0)
            {
                isPrime = false;
                break;
            }
        }

        if (isPrime == true)
        {
            bag[valid++] = i;
        }
    }

    //printing results
    for(i=0; i < bag.length; i++)
        str = str + bag[i] + " ";
    System.out.println("zaa xd");
    System.out.println(str);
    }

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

В вашем коде есть ряд логических ошибок.

Сначала у вас есть цикл for, в котором завершающий случай не связан с индексатором.Несмотря на то, что это действительно, это усложняет понимание кода.

Что еще более важно, результат всегда устанавливается в значение false, а не true, поэтому цикл будет работать вечно, так как значение valid никогда не изменяется.

...