Параметр 'num' не должен быть назначен (ошибка) - PullRequest
0 голосов
/ 21 февраля 2019

Я новый кодер в Java, и я сталкиваюсь с руководством по Palindrome, которое выдает мне ошибку "Параметр 'num' не должен быть назначен в выделенной строке 16.

Может кто-нибудь взятьПосмотрите и предложите некоторое представление о том, что является причиной этой ошибки?

Программа работает правильно. Но мне интересно это.

Большое спасибо! (см. код ниже)

1 package javaTutorial;
2
3 public class IsPalindrome {
4
5   final static int num = 12321;
6
7   public static void main(String[] args) {
8       System.out.println(is_Palindrome(num));
9   }
10 
11  public static int reverse(int num) {
12      int rev_num = 0;
13      while (num > 0) {
14          int r = num % 10;
15          rev_num = rev_num * 10 + r;
16          num /= 10; *************  ERROR
17      }
18      return rev_num;
19  }
20 
21  public static boolean is_Palindrome(int num) {
22      if (num == reverse(num))
23          return true;
24      return false;
25  }
26 }

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Тип вашей переменной num является окончательным, что в java означает, что значение переменной нельзя изменить.Я полагаю, в этом причина ошибки.

Википедия: в языке программирования Java ключевое слово final используется в нескольких контекстах для определения объекта, который может быть назначен только один раз.

0 голосов
/ 21 февраля 2019

Это говорит о том, что переназначать параметры - плохая практика.

Возможно, это правильно.Переназначение параметра может несколько усложнить отладку в некоторых обстоятельствах, поскольку после итерации цикла вы не сможете увидеть, какие данные были переданы в функцию изначально, поскольку вы перезаписали num.Чтобы исправить это, создайте вторичную переменную, которую вы переназначаете:

public static int reverse(int num) {
    int rev_num = 0;
    int acc_num = num; // Here
    while (acc_num > 0) { //The use it instead 
        int r = acc_num % 10;
        rev_num = rev_num * 10 + r;
        acc_num /= 10; 
    }
    return rev_num;
}

Обратите внимание, что num никогда не меняется.

Но нет, это не фактическая ошибка.Он просто говорит вам, что он считает лучшей практикой.

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