Два исправления, основанные на вашем текущем коде.
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;