我正在编写一个程序,将罗马数字翻译成十进制数字。
由于某种原因,它在检查用户输入时不会返回值。但它已经修好了,
我现在面对的是:代码没有回复我的数字(输入后它会一直显示一个空白的屏幕)。
我该如何解决这个问题?我的代码中有问题吗?我只是一个初学者,所以我学到的只是基本的东西。
public static void main(String[] args) {
// Fill in the body
Scanner in= new Scanner(System.in);
String user = promptUserForNumeral(in);
while (user.length()!=0) {
int numb= convertNumeralToNumber(user);
System.out.println("The numeral "+user+ " is the decimal number "+numb);
user = promptUserForNumeral(in);
}
}
private static String promptUserForNumeral(Scanner inScanner) {
// Fill in the body
System.out.println("Enter a roman numeral (Q to quit): ");
String i = inScanner.nextLine();
while (i.length()<=0) {
System.out.println("ERROR! You must enter a non-empty line!");
System.out.println("Enter a roman numeral (Q to quit): ");
i = inScanner.nextLine();
}
if ( i.equalsIgnoreCase("q")) {
System.out.println("Goodbye!");
System.exit(0);
}
return i;
}
private static int convertNumeralToNumber(String numeral) {
// Fill in the body
int numb = 0;
int n=0;
int ch=0;
while (n<numeral.length()) {
char l= numeral.charAt(n);
numb=convertCharacterToNumber(l);
if (numb<0) {
System.out.println("Cannot be define");
n++;
}
else if (n==numeral.length()) {
ch+=numb;
}
else {
int nnumb=convertCharacterToNumber(numeral.charAt(n));
if (nnumb>numb) {
ch+=nnumb-numb;
n++;
}
else {
ch+=numb;
}
}
}
if (ch>3999) {
System.out.println("Input number must be less than 3999");
numb=ch;
}
return numb;
}
private static int convertCharacterToNumber(char numeral) {
// Fill in the body
int n=0;
if (numeral=='m' || numeral =='M') {
return 1000;
}
else if (numeral=='d' || numeral=='D') {
return 500;
}
else if (numeral=='c' || numeral=='C') {
return 100;
}
else if (numeral=='l' || numeral=='L') {
return 50;
}
else if (numeral=='x' || numeral=='X') {
return 10;
}
else if (numeral=='v' || numeral=='V') {
return 5;
}
else if (numeral=='i' || numeral=='I') {
return 1;
}
else {
return -1;
}
}
}
答案 0 :(得分:0)
检查
while (i.length()>=0) {
if (i.length()==0) {
System.out.println("ERROR! You must enter a non-empty line!");
System.out.println("Enter a roman numeral (Q to quit): ");
i = inScanner.nextLine();
}
else if ( i.equalsIgnoreCase("q")) {
System.out.println("Goodbye!");
System.exit(0);
}
}
return i;
当i.length()&gt;时,这不会退出或返回任何内容。如果用户没有输入q
,则该返回是死代码。
解决方案:使用break指定else;那就行了。
else
break;
答案 1 :(得分:0)
我会重写你的while循环:
while (i.length()<=0) {
System.out.println("ERROR! You must enter a non-empty line!");
System.out.println("Enter a roman numeral (Q to quit): ");
i = inScanner.nextLine();
}
if ( i.equalsIgnoreCase("q")) {
System.out.println("Goodbye!");
System.exit(0);
}
return i;
答案 2 :(得分:0)
你有很多冗余的条件。问题出在这个循环中:
while (i.length() >= 0) {
if (i.length() == 0) {
System.out.println("ERROR! You must enter a non-empty line!");
System.out.println("Enter a roman numeral (Q to quit): ");
i = inScanner.nextLine();
} else if (i.equalsIgnoreCase("q")) {
System.out.println("Goodbye!");
System.exit(0);
}
}
为我喜欢&#34; V&#34;取任何价值。
所以,你有一个无限循环。再次完成你的逻辑&amp;删除任何不必要的条件您还可以使用break;
语句来终止循环。
答案 3 :(得分:0)
public class stringTest {
public static void main(String[] args) {
// Fill in the body
Scanner in= new Scanner(System.in);
String user = promptUserForNumeral(in);
while (user.length()!=0) {
int numb= convertNumeralToNumber(user);
System.out.println("The numeral "+user+ " is the decimal number "+numb);
user = promptUserForNumeral(in);
}
}
private static String promptUserForNumeral(Scanner inScanner) {
// Fill in the body
System.out.println("Enter a roman numeral (Q to quit): ");
String i = inScanner.nextLine();
while (i.length()>=0) {
if (i.length()==0) {
System.out.println("ERROR! You must enter a non-empty line!");
System.out.println("Enter a roman numeral (Q to quit): ");
i = inScanner.nextLine();
}
else if ( i.equalsIgnoreCase("q")) {
System.out.println("Goodbye!");
System.exit(0);
}
else return i; // in your program the while is never ending, so it does not return any value.
}
return "";
}
private static int convertNumeralToNumber(String numeral) {
// Fill in the body
int preNumber = 0;
int curNumber = 0;
int n=0;
int ch=0;
while (n<numeral.length()) {
char l= numeral.charAt(n);
curNumber=convertCharacterToNumber(l);
if (curNumber<0) {
System.out.println("Cannot be define");
System.exit(0);
}
else {
// I have changed the logic to evaluated decimal Number equivalent to Roman Literal
if(preNumber < curNumber && n != 0) ch = curNumber - ch;
else ch += curNumber;
preNumber = curNumber;
}
n++;
}
return ch;
}
private static int convertCharacterToNumber(char numeral) {
// Fill in the body
if (numeral=='m' || numeral =='M') {
return 1000;
}
else if (numeral=='d' || numeral=='D') {
return 500;
}
else if (numeral=='c' || numeral=='C') {
return 100;
}
else if (numeral=='l' || numeral=='L') {
return 50;
}
else if (numeral=='x' || numeral=='X') {
return 10;
}
else if (numeral=='v' || numeral=='V') {
return 5;
}
else if (numeral=='i' || numeral=='I') {
return 1;
}
else {
return -1;
}
}
}
您可以查看promptUserForNumeral方法,我认为没有必要。您可以在主while循环中包含它以查找用户错误。