关于如何取消系统输入的Java问题

关于如何取消系统输入的Java问题,java,Java,我想在用户输入q时打印最后一条消息,但它给出了一个错误 语言翻译程序 请输入输入的句子,按q退出: 罗宾于2009年来到加拿大蒙特利尔 罗宾在蒙特利尔呆了11年。蒙特利尔在加拿大 请输入输入的句子,按q退出: 露西于2000年来到德国柏林 露西在柏林呆了20年。柏林在德国 请输入操作中的数字,然后按q退出: q 感谢您使用翻译程序 import java.util.Scanner; public class MiniTranslator { public static void mai

我想在用户输入q时打印最后一条消息,但它给出了一个错误

语言翻译程序 请输入输入的句子,按q退出:

罗宾于2009年来到加拿大蒙特利尔

罗宾在蒙特利尔呆了11年。蒙特利尔在加拿大

请输入输入的句子,按q退出:

露西于2000年来到德国柏林

露西在柏林呆了20年。柏林在德国

请输入操作中的数字,然后按q退出:

q

感谢您使用翻译程序

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");
        }
    }
}

好的,你有一些迫在眉睫的问题

留言=q不是您在Java中比较字符串的方式,您应该使用!q、 equalsmessage与==相同,例如,它将成为q.equalsmessage

但是,你的主要问题是

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));
您已经对消息包含的内容进行了假设,而不是花时间来确保消息是否包含您所想的内容

所以,当消息为q时,数组将只包含一个元素,所以只要您执行字符串city=arr[3];您有一个数组索引超出范围的问题

一个简单的解决方案可能是在拆分之前检查消息是否等于q,但更好的解决方案是检查数组中的元素数

if (arr.length == 7) {
    // Process the result
} else if (!"q".equals(message)) {
    // Invalid input
}

此外,如前所述,您应该在循环外创建一次扫描仪,而不是将其关闭-因为您还将终止不朽的系统输入流,这也不是很好

,这可能是您错误的真正原因您正在循环内关闭扫描仪,这是一个灾难的配方。使用完后,在循环外部关闭它it@Hovercraft这是一个问题:P@mad是的,我的错。我在打电话,无法重新打开it@HovercraftFullOfEels我会对所有其他问题发表评论,但这不是很具有指示性