我正在尝试找出我遇到的一些问题。
基本上我的问题是,我的方法返回的值不正确。
我有打印行语句只是为了确保它有效,但它总是返回1
,即使我调用另一个应该返回字符串的方法。
每次调用方法时,变量current_number/image_number
都应该更新(如果我从 1
开始继续调用转发,我应该会得到2
、3
、4
等(。
这是我的代码
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中的原始数据类型。这意味着您的函数forward
的current_number
与方法current_number
的实例不同。传入的变量具有相同的值,但引用不同。
要修复,您需要将 current_number
的值分配给 forward
的结果。
current_number = forward(current_number);
有用的阅读:
- Java是"按引用传递">
- 还是"按值传递"?
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
每当调用该方法时,都会传递current_number的副本。 然后,当该方法结束时,将丢弃副本。 请尝试改用整数对象。