我正在使用我正在执行的程序进行无限循环,并且我不确定如何通过它。在这几个小时工作,我无法弄明白。 (对不起,如果这对你们来说似乎很简单,但我还是java的新手)。基本上发生的事情就是一切都会先编译并按原样运行,但只要我输入一个选择它就会重复主菜单而不给我预期的操作。
例如,程序应该适用于我输入的位置" 1,2,3或4"作为一个选择,它显示"早上好"分别是英语,意大利语,西班牙语和德语,5结束该计划。相反,如果我输入1,2,3,4或5作为选择,菜单会自动重复。
输入除1-5之外的任何数字都会显示一条错误消息,指出所选内容无效。以便while循环按预期工作。所以有人能指出我做错了吗?
import java.util.Scanner;
import java.io.*;
public class Translator
{
public static void main(String[] args)
{
// local variable to hold the menu selection
int selection = 0;
do
{
// display the menu
displayMenu(selection);
// perform the selected operation
switch (selection)
{
case 1:
System.out.println("Good Morning.");
break;
case 2:
System.out.println("Buongiorno.");
break;
case 3:
System.out.println("Buenos dias.");
break;
case 4:
System.out.println("Guten morgen.");
break;
case 5:
System.out.println("GoodBye!");
break;
}
} while (selection != 5);
}
// the displayMenu module displays the menu and gets and validates
// the users selection.
public static void displayMenu(int selection)
{
//keyboard scanner
Scanner keyboard = new Scanner(System.in);
// display the menu
System.out.println(" select a language and i will say good morning");
System.out.println("1. English.");
System.out.println("2. Italian.");
System.out.println("3. Spanish.");
System.out.println("4. German.");
System.out.println("5. End the Program.");
System.out.println("Enter your selection");
// users selection
selection = keyboard.nextInt();
while (selection < 1 || selection > 5)
{
System.out.println ("that is an invalid select.");
System.out.println (" Enter 1, 2, 3, 4, or 5.");
selection = keyboard.nextInt();
}
}
}
答案 0 :(得分:2)
问题是方法的参数是在Java中通过值传递的。因此,为displayMenu
参数设置新值的selection
末尾的部分根本不会更改selection
中main
局部变量的值。因此,在main
中,selection
变量始终的值为0.
鉴于您未在selection
中使用displayMenu
的原始值,您应该将其转换为不带参数的方法,但返回所选的方法值:
public static int displayMenu()
{
// Code to print out the menu [...]
int selection = keyboard.nextInt();
while (selection < 1 || selection > 5)
{
System.out.println ("that is an invalid select.");
System.out.println (" Enter 1, 2, 3, 4, or 5.");
selection = keyboard.nextInt();
}
return selection;
}
在main
:
int selection;
do
{
selection = displayMenu();
switch (selection)
{
...
}
}
while (selection != 5);
答案 1 :(得分:0)
Java不支持“真正的”传递引用,这是您的程序似乎依赖的。您将变量初始化为0
并要求方法更改它,这是不可能发生的。方法中的参数值仅仅是传递给它们的原始值的副本。一个小小的演示:考虑你有这种方法......
public static void increment(int a) {
a++;
}
以及使用它的代码......
int a = 0;
increment(a);
System.out.println(a);
打印 0
,因为唯一增加的是方法a
中increment
的本地副本。原始值保持不变。
您可以使您的方法返回Jon Skeet的答案中建议的值。
答案 2 :(得分:0)
答案 3 :(得分:0)
在do-while循环中调用displayMenu(),并且在方法之间传递值时出现问题。是的,你的缩进有问题。检查主题,如控制语句,书中的变量。改进版本如下所示:
package imporvedtranslator;
import java.io.*;
import java.util.Scanner;
public class ImporvedTranslator
{
public static void main(String[] args)
{
int selection;
selection = displayMenu();
switch (selection)
{
case 1:
System.out.println("Good Morning.");
break;
case 2:
System.out.println("Buongiorno.");
break;
case 3:
System.out.println("Buenos dias.");
break;
case 4:
System.out.println("Guten morgen.");
break;
case 5:
System.out.println("GoodBye!");
break;
}
}
private static int displayMenu()
{
int sel;
Scanner sc = new Scanner(System.in);
System.out.println(" select a language and i will say good morning");
System.out.println("1. English.");
System.out.println("2. Italian.");
System.out.println("3. Spanish.");
System.out.println("4. German.");
System.out.println("5. End the Program.");
System.out.println("Enter your selection");
sel = sc.nextInt();
while (sel<1 || sel>5)
{
System.out.println ("that is an invalid select.");
System.out.println (" Enter 1, 2, 3, 4, or 5.");
sel = sc.nextInt();
}
return sel;
}
}