Возникают проблемы с возвратом обновленного значения в другой класс - PullRequest
0 голосов
/ 24 апреля 2020

Итак, я пытаюсь заставить мой класс Test1 распечатать обновленное значение newText при использовании метода menuSelection. Итак, скажем: menuOption = 1; Я хочу обновить мою переменную newText до 0, поэтому, когда я распечатываю ее в своем классе Test1, она выводит 0. Проблема заключается в том, что даже после того, как я использую метод menuSelection, она не обновляет мою переменную newText, поскольку она выводит только 1.


импорт java .util.Scanner;

  public class Test {

      public static int newText = 1;

      public static int menuSelection(){
         Scanner scan = new Scanner(System.in);

         int menuOption = scan.nextInt();

         while((menuOption < 0)||(menuOption > 2)) {
            System.out.print("Not a valid option, please press 1 or 2 ");
            menuOption = scan.nextInt();
        }


        if(menuOption == 1 ){
           newText = 0;
        }
        if(menuOption == 2){
           newText = 1;

        }
        return newText;
     }
 }

public class Test1 {

    public static void main(String[] args) {
      int newText = Test.newText;
      System.out.print(newText);
      Test.menuSelection();
      System.out.println(newText);
   }
}

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

вы написали свой метод следующим образом

 public static int menuSelection(){

, но вы не получили возвращаемого значения в методе main.

, поэтому вы можете исправить свой код только в этой строке.

КАК ЕСТЬ

Test.menuSelection();

TO-BE

newText = Test.menuSelection();

, но если вы хотите установить значение c newText, тогда вы измените имя переменной. Я думаю, что вы путаетесь с scope.

ссылка ссылка

0 голосов
/ 24 апреля 2020

Проблема в том, что вы не присвоили значение из вызова метода. Более фундаментальная проблема заключается в том, что вы используете значения stati c для передачи информации между классами.

Не следует использовать static fields для передачи значений. Также в большинстве случаев вы не должны использовать методы stati c (но есть исключения). Просто сделайте это следующим образом с экземплярами или локальными полями в зависимости от ситуации.

public class MenuTest {
    public static void main(String[] args) {
       // instantiate an instance of the class.
        Test mt = new Test();
        int newText = 1;
        System.out.print(newText);
        // invoke the method and get the return value.
        newText = mt.menuSelection();

        System.out.println(newText);
    }
}

class Test {

    public int menuSelection() {
        Scanner scan = new Scanner(System.in);
        int returnValue = 0;
        int menuOption = scan.nextInt();

        while ((menuOption < 0) || (menuOption > 2)) {
            System.out.print(
                    "Not a valid option, please press 1 or 2 ");
            menuOption = scan.nextInt();
        }

        if (menuOption == 1) {
            returnValue = 0;
        }
        if (menuOption == 2) {
            returnValue = 1;

        }
        return returnValue;
    }
}

Я переименовал поле newText в returnValue, чтобы подчеркнуть, что это совершенно другая переменная, чем локальная переменная, которую вы используете в main.

...