英文:
Java Question on how to cancel system input
问题
import java.util.Scanner;
public class MiniTranslator {
public static void main(String[] args) {
String message = "";
do {
//Declaring scanner
Scanner keyboard = new Scanner(System.in);
//Printing greeting message
System.out.println("---------------------------------------------------------\n"
+ "\tLanguage Translator Program\n"
+ "---------------------------------------------------------");
System.out.println("Please enter the input sentence (press q to exit): \n");
message = keyboard.nextLine();
String[] arr = message.split("[ ,.]+", 8);
String name = arr[0];
String city = arr[3];
String country = arr[4];
String year = arr[6];
int noOfYears = 2020 - (Integer.parseInt(year));
System.out.println("\n" + name + " stay in " + city + " for " + noOfYears + " years. "
+ city + " is in " + country + ".");
System.exit('q');
keyboard.close();
} while (message != "q");
if (message == "q") {
System.out.println("Thanks for using translator program");
}
}
}
英文:
I want to print last message when user inputs q but it gives an error.
Language Translator Program
Please enter the input sentence (press q to exit):
Robin came to Montreal, Canada in 2009.
Robin stays in Montreal for 11 years. Montreal is in Canada.
Please enter the input sentence (press q to exit):
Lucy came to Berlin, Germany in 2000.
Lucy stay in Berlin for 20 years. Berlin is in Germany.
Please enter the numbers along operation (press q to exit):
q
Thanks for using translator program.
import java.util.Scanner;
public class MiniTranslator {
public static void main(String[] args) {
String message ="";
do {
//Declaring scanner
Scanner keyboard = new Scanner(System.in);
//Printing greeting message
System.out.println("---------------------------------------------------------\n"
+"\tLanguage Translator Program\n"
+"---------------------------------------------------------");
System.out.println("Please enter the input sentence (press q to exit): \n");
message = keyboard.nextLine();
String[] arr = message.split("[ ,.]+",8);
String name = arr[0];
String city = arr[3];
String country = arr[4];
String year = arr[6];
int noOfYears =2020 - (Integer.parseInt(year));
System.out.println("\n" + name +" stay in " + city +" for " + noOfYears +" years. "
+ city +" is in " + country +".");
System.exit('q');
keyboard.close();
}
while(message!="q");
if(message =="q") {
System.out.println("Thanks for using translator program");
}
}
}
答案1
得分: 2
好的,以下是翻译好的部分:
"message!="q"" 不是在Java中比较 String
的方法,你应该使用 !"q".equals(message)
来进行比较(同样,==
也应该变成 "q".equals(message)
)。
但是,你的主要问题在这里...
System.out.println("请输入输入句子(按q退出): \n");
message = keyboard.nextLine();
String[] arr = message.split("[ ,.]+",8);
String name = arr[0];
String city = arr[3];
String country = arr[4];
String year = arr[6];
int noOfYears =2020 - (Integer.parseInt(year));
你假设了 message
包含的内容,而没有花时间确保它包含你认为的内容。
因此,当 message
是 q
时,你的数组将只包含一个元素,所以一旦执行 String city = arr[3];
,你就会遇到数组越界问题。
一个“简单”的解决方案可能是在拆分之前检查 message
是否等于 q
,但更好的解决方案是检查数组中的元素数量...
if (arr.length == 7) {
// 处理结果
} else if (!"q".equals(message)) {
// 无效输入
}
另外,正如已经提到的,你应该在循环外部创建你的 Scanner
,而不要关闭它 - 因为这会终止不死的系统输入流,这并不好。
英文:
Ok, you have a number of immediate issues
message!="q"
is not how you compare String
s in Java, you should be using !"q".equals(message)
instead (same with ==
, which would become "q".equals(message)
for example)
But, your main problem is here ...
System.out.println("Please enter the input sentence (press q to exit): \n");
message = keyboard.nextLine();
String[] arr = message.split("[ ,.]+",8);
String name = arr[0];
String city = arr[3];
String country = arr[4];
String year = arr[6];
int noOfYears =2020 - (Integer.parseInt(year));
You've made an assumption on what message
contains, instead of taking the time to ensure if contains what you think.
So, when message
is q
, your array will contain only one element, so as soon as you do String city = arr[3];
you have an array index out of bounds issue.
A "simple" solution might be to check if message
is equal to q
before you split, but a better solution would be to check the number of elements in array...
if (arr.length == 7) {
// Process the result
} else if (!"q".equals(message)) {
// Invalid input
}
Also, as has been stated, you should create your Scanner
once, outside of the loop and NOT close it - as you'd terminate the undying system input stream as well, which isn't pretty
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论