Неузнаваемая переменная Java - PullRequest
0 голосов
/ 02 июня 2018

Я пишу метод для факторизации числа, и по какой-то причине, когда я пытаюсь напечатать фактор А, он говорит, что он не распознан, какие-либо предложения?

    public static void factorize(int n){
    if (n % 2 == 0){                                                //If number is even
        int factorA = 2;
        int factorB = n/2;
    }else{                                                          //If number is odd
        int halfLine = n/2;                                         //Only variables that are even will be factors greater than half of them, this case is only for odd integers
        int smallestFactorOdd = 3;

        while (smallestFactorOdd < halfLine){                       //Until you've found the smallest factor for add variables
            if (n % smallestFactorOdd == 0){                        //If smallestFactorOdd is a factor of n
                int factorA = smallestFactorOdd;
                int factorB = n/smallestFactorOdd;
            }else{
                smallestFactorOdd += 2;
            }
        }
    }
    System.out.println(factorA);
}

Обновленный код (ошибка все еще принимается):

public static void factorize(int n){
    int factorA;
    int factorB;

    if (n % 2 == 0){                                                //If number is even
        factorA = 2;
        factorB = n/2;
    }else{                                                          //If number is odd
        int halfLine = n/2;                                         //Only variables that are even will be factors greater than half of them, this case is only for odd integers
        int smallestFactorOdd = 3;

        while (smallestFactorOdd < halfLine){                       //Until you've found the smallest factor for add variables
            if (n % smallestFactorOdd == 0){                        //If smallestFactorOdd is a factor of n
                factorA = smallestFactorOdd;
                factorB = n/smallestFactorOdd;
            }else{
                smallestFactorOdd += 2;
            }
        }
    }
    System.out.println(factorA);
    System.out.println(factorB);
}

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Вы должны инициализировать локальные переменные перед их использованием.

вам не нужно инициализировать примитивы только в случае переменных экземпляра.

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

Итак, внутри вашего метода присвойте 0 локальным переменным, и это будет работать.

public static void factorize(int n){
int factorA = 0;
int factorB = 0;

if (n % 2 == 0){                                                //If number is even
    factorA = 2;
    factorB = n/2;
}else{                                                          //If number is odd
    int halfLine = n/2;                                         //Only variables that are even will be factors greater than half of them, this case is only for odd integers
    int smallestFactorOdd = 3;

    while (smallestFactorOdd < halfLine){                       //Until you've found the smallest factor for add variables
        if (n % smallestFactorOdd == 0){                        //If smallestFactorOdd is a factor of n
            factorA = smallestFactorOdd;
            factorB = n/smallestFactorOdd;
        }else{
            smallestFactorOdd += 2;
        }
     }
  }
  System.out.println(factorA);
  System.out.println(factorB);
}
0 голосов
/ 02 июня 2018

И объявление, и инициализация должны быть вне if

public static void factorize(int n){
    int factorA = 0;
    int factorB = 0;

    if (n % 2 == 0){                                                 
        factorA = 2;
        factorB = n/2;
    }else{                                                           
        int halfLine = n/2;                                         
        int smallestFactorOdd = 3;
0 голосов
/ 02 июня 2018

Вы объявляете factorA внутри вашего while цикла.Любая переменная, объявленная внутри цикла, не существует вне цикла.(Другие классы и методы даже не знают, что переменная существует) Вам нужно объявить переменную вне цикла

Примерно так:

public static void factorize(int n){
    int factorA = 0;
    int factorB = 0;
    ...

РЕДАКТИРОВАТЬ:

Вы должны установить переменную в ноль, когда вы объявляете ее.В противном случае есть вероятность, что ему никогда не будет присвоено значение.Поскольку это локальная переменная метода, она должна быть инициализирована перед использованием.(Затем вы пытаетесь распечатать его. Компилятор не знает значение, поэтому он жалуется)

Дополнительная информация о второй ошибке:

Значения по умолчанию и инициализация в Java

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