Простое домашнее задание на Java - PullRequest
1 голос
/ 08 сентября 2011

Итак, я java newby, и я делаю домашнее задание, которое просит меня написать программу для поиска первых четырех идеальных чисел.Я думаю, что у меня все примерно правильно, хотя я не могу проверить свою программу из-за сообщения об ошибке, которое гласит «Исключение в потоке« основной »javva.lang.NoSuchMethodError: main» при попытке запустить мою программу.Он скомпилирован нормально, и я думаю, что все математические вопросы верны:

import java.awt.*;
public class PerfectNumbers
{
    int num = 1, divisor1 = 1, divisor2, divSum, perfNum1, perfNum2, perfNum3, perfNum4;
    public void main()
    {
       do
       {
         while (num != divSum)
         {
             if (num % divisor1 == 0 && divisor1 != Math.sqrt(num))
                 {
                     divSum += divisor1;
                     divisor2 = num / divisor1;
                     divSum += divisor2;
                     divisor1++;
                 }
             else if (num % divisor1 !=0 && divisor1 != Math.sqrt(num))
                 divisor1++;
             else if (divisor1 == Math.sqrt(num))
                 {
                 divSum += Math.sqrt(num);
                 divisor1 = 1;
                 }
         }
         if (num == divSum && perfNum1 == 0)
             {
                 perfNum1 = num;
                 num++;
                 divSum = 0;
             }
         else if (num == divSum && perfNum2 == 0)
             {
                 perfNum2 = num;
                 num++;
                 divSum = 0;
             }
         else if (num == divSum && perfNum3 == 0)
             {
                 perfNum3 = num;
                 num++;
                 divSum = 0;
             }
         else if (num == divSum && perfNum4 == 0)
             {
                 perfNum4 = num;
                 break;
            }
       }
       while (perfNum4 == 0);
       if (perfNum4 == 0)
       System.out.print("The first four perfect numbers are "
           + perfNum1 + ", " + perfNum2 + ", " + perfNum3 + ", "
           + perfNum4 + ".");

    }
}

PS Любой совет по поводу новых ошибок в синтаксисе или стиле будет с благодарностью!

Ответы [ 6 ]

8 голосов
/ 08 сентября 2011
public void main()

Должно быть

public static void main(String[] args)
2 голосов
/ 08 сентября 2011

Пожалуйста, помните, что ниже приведены рекомендации по кодированию, программа все равно будет компилироваться и работать нормально, не внося следующие изменения.

  1. Вы не используете какие-либо компоненты AWT, следовательно, вы можетеудалить этот оператор импорта.

  2. написать объявление переменной и инициализировать операторы только одной переменной на строку.(ссылаясь на строку № 4.).Это облегчает отладку и удобство сопровождения.

    int num = 1, divisor1 = 1, divisor2, divSum, perfNum1, perfNum2, perfNum3, perfNum4;
    
  3. Для последнего оператора if () укажите открывающую и закрывающую скобки, даже если есть одна строка.Это улучшит читабельность кода.Поэтому, даже если какой-то другой программист займется вашим кодом, он не будет путать со строками кода.

  4. Как уже упоминалось, вам нужно дать статический модификатор для метода main.

1 голос
/ 30 сентября 2015

Совершенное число - это положительное целое число, равное сумме его собственных положительных делителей, то есть суммы его положительных делителей, исключая само число. Эквивалентно, идеальное число - это число, равное половине суммы всех его положительных делителей. Первое совершенное число равно 6, потому что 1, 2 и 3 являются его собственными положительными делителями, а 1 + 2 + 3 = 6. Эквивалентно, число 6 равно половине суммы всех его положительных делителей: (1 + 2 + 3 + 6) / 2 = 6.

открытый класс IsPerfectNumber {

public boolean isPerfectNumber(int number){

    int temp = 0;
    for(int i=1;i<=number/2;i++){
        if(number%i == 0){
            temp += i;
        }
    }
    if(temp == number){
        System.out.println("It is a perfect number");
        return true;
    } else {
        System.out.println("It is not a perfect number");
        return false;
    }
}

public static void main(String a[]){
    IsPerfectNumber ipn = new IsPerfectNumber();
    System.out.println("Is perfect number: "+ipn.isPerfectNumber(28));
}

}

1 голос
/ 08 сентября 2011

Два исправления, основанные на вашем текущем коде.

Fix One - переместить переменные из области видимости класса в область видимости основного метода

В настоящее время ваши переменные находятся вне основного метода, но внутри класса. Поскольку метод main является статическим, вы не можете ссылаться на них, так как они являются переменными каждого экземпляра класса PerfectNumbers (и вы не создаете экземпляр класса PerfectNumbers).

Изменение:

int num = 1, divisor1 = 1, divisor2, divSum, perfNum1, perfNum2, perfNum3, perfNum4;
public static void main(String[] args)
{

до

public static void main(String[] args)
{
  int num = 1, divisor1 = 1, divisor2, divSum, perfNum1, perfNum2, perfNum3, perfNum4;

Исправить два - инициализировать ваши переменные

Для примитивных типов (таких как int), Java должна быть гарантирована, что ваши переменные были инициализированы. Поскольку вы в настоящее время инициализируете переменные в условных выражениях, Java не может быть на 100% гарантирована, что они будут инициализированы.

Изменение:

int num = 1, divisor1 = 1, divisor2, divSum, perfNum1, perfNum2, perfNum3, perfNum4;

до

int num = 1, divisor1 = 1, divisor2 = 1, divSum = 0, perfNum1 = 0, perfNum2 = 0, perfNum3 = 0, perfNum4 = 0;

Примечание. Эти изменения приведут к компиляции кода, но это пока не правильно. Поскольку это домашнее задание, попробуйте и посмотрите, можете ли вы попытаться исправить это самостоятельно.



Пару чисток, чтобы все выглядело немного лучше

Утилита One (как указано @ Sarma7)

Удалить эту строку:

import java.awt.*;

Поскольку вы не используете какие-либо методы / переменные из этого пакета.

Очистка Два

Это хороший стиль, чтобы инициализировать одну переменную в строке (если объявить без инициализации, вы, вероятно, можете оставить ее в той же строке).

, например

int num = 1;
int divisor1 = 1;
int divisor2 = 1;
int divSum = 0;
int perfNum1 = 0;
int perfNum2 = 0;
int perfNum3 = 0;
int perfNum4 = 0;
0 голосов
/ 08 сентября 2011

Я думаю, вы должны сначала узнать о концепции ООП, а затем, что означает static.Вам нужен static main метод, чтобы начать.Внутри метода main вы можете использовать другие статические поля, или сначала вы должны создать экземпляры некоторых объектов, а затем вы можете использовать поля этих объектов.Тогда поймай @ богемный ответ

0 голосов
/ 08 сентября 2011

Сделайте это:

public static void main(String[] args) {
    new PerfectNumbers().main();
}

Все ваши поля являются полями экземпляра (т. Е. Не статичны), поэтому на них нельзя ссылаться из метода static (на них можно ссылаться только из экземпляр ), поэтому создайте объект PerfectNumbers и вызовите для него метод main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...