Java - 方法输出不返回新值



我正在尝试找出我遇到的一些问题。

基本上我的问题是,我的方法返回的值不正确。

我有打印行语句只是为了确保它有效,但它总是返回1,即使我调用另一个应该返回字符串的方法。

每次调用方法时,变量current_number/image_number都应该更新(如果我从 1 开始继续调用转发,我应该会得到234等(。

这是我的代码

public class Menu {
    static final int MIN_NUMBER = 1;
    static final int MAX_NUMBER = 8;
    static int image_number = 1;
    static boolean exit;
    public static int forward(int current_number) {
        if (current_number < MAX_NUMBER) {
            current_number++;
        } else if (current_number >= MAX_NUMBER) {
            current_number = MIN_NUMBER;
        }
        return current_number;
    }
    public static void showMenu() {
        int current_number = image_number; // global int that equals 1
        while (!exit) {
            Scanner input = new Scanner(System.in);
            Random rand = new Random();
            int randomvalue = rand.nextInt(MAX_NUMBER) + MIN_NUMBER; // used in another method
            System.out.println("1. forward"); // menu with options
            System.out.println("2.");
            System.out.println("3.");
            System.out.println("4. Exit");
            System.out.println(current_number);
            int choice = input.nextInt();
            switch (choice) {
                case 1:
                    forward(current_number);
                    break;
                case 4:
                    exit = true;
                    break;
            }
        }
    }
}

好的,我想我明白了。

switch 语句中,当您调用返回新数字的 forward 方法时,您需要一个值来将新数字传递给,否则它会丢失。

将代码更改为此代码可能会有所帮助。

switch (choice) {
    case 1:
      current_number = forward(current_number);
      break;
    case 4:
      exit = true;
      break;
}

int是Java中的原始数据类型。这意味着您的函数forwardcurrent_number与方法current_number的实例不同。传入的变量具有相同的值,但引用不同。

要修复,您需要将 current_number 的值分配给 forward 的结果。

current_number = forward(current_number);

有用的阅读:

    Java是"按引用传递">
  • 还是"按值传递"?
  • https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

每当调用该方法时,都会传递current_number的副本。 然后,当该方法结束时,将丢弃副本。 请尝试改用整数对象。

最新更新