输入完成后如何终止扫描仪?

时间:2013-04-25 05:12:04

标签: java

public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        try {
            while (scan.hasNextLine()){

                String line = scan.nextLine().toLowerCase();
                System.out.println(line);   
            }

        } finally {
            scan.close();
        }
    }

我想知道在完成输入输入后如何终止程序? 假设我将继续输入输入,扫描仪仍会在几次“输入”之后继续进行... 我试过了:

if (scan.nextLine() == null) System.exit(0);

if (scan.nextLine() == "") System.exit(0);  

他们没有工作......程序继续并且与初衷混淆,

8 个答案:

答案 0 :(得分:22)

问题是程序(像你的程序)不知道用户已完成输入输入,除非用户......某种方式......告诉它。

用户可以通过两种方式执行此操作:

  • 输入“文件结束”标记。在UNIX和Mac OS上(通常) CTRL + D ,在Windows上 CTRL + Z 。这将导致hasNextLine()返回false

  • 输入一些程序识别为“我已完成”的特殊输入。例如,它可能是一个空行,或某些特殊值,如“退出”。该程序需要专门测试。

(您还可以想象使用计时器,并假设用户已经完成,如果他们没有输入任何输入N秒或N分钟。但这不是一个用户友好的方式来做到这一点。 )功能


您当前版本失败的原因是您使用==来测试空字符串。您应该使用equalsisEmpty方法。 (见How do I compare strings in Java?

需要考虑的其他事项是区分大小写(例如“退出”与“退出”)以及前导或尾随空格的影响(例如“退出”与“退出”)。

答案 1 :(得分:4)

字符串比较使用.equals()而不是==完成。

所以,试试scan.nextLine().equals("")

答案 2 :(得分:1)

您必须查找表明输入结束的特定模式,例如“##”

// TODO Auto-generated method stub
    Scanner scan = new Scanner(System.in);
    try {
        while (scan.hasNextLine()){

            String line = scan.nextLine().toLowerCase();
            System.out.println(line);
            if (line.equals("##")) {
                System.exit(0);
                scan.close();
            }
        }

    } finally {
        if (scan != null)
        scan.close();
    }

答案 3 :(得分:0)

使用此方法,您必须显式创建退出命令或退出条件。例如:

String str = "";
while(scan.hasNextLine() && !((str = scan.nextLine()).equals("exit")) {
    //Handle string
}

此外,您必须处理字符串等于.equals()而不是==的情况。 ==比较两个字符串的地址,除非它们实际上是同一个对象,否则永远不会成立。

答案 4 :(得分:0)

在这种情况下,我建议您使用do,while循环而不是while。

    Scanner sc = new Scanner(System.in);
    String input = "";
    do{
        input = sc.nextLine();
        System.out.println(input);
    } while(!input.equals("exit"));
sc.close();

为了退出程序,您只需要指定一个字符串标题,例如出口。如果输入等于退出,则程序将退出。此外,用户可以按control + c退出程序。

答案 5 :(得分:0)

您可以检查来自控制台的下一行输入,并检查您的终止条目(如果有)。

假设您的终止条目是“退出”,那么您应该尝试以下代码: -

Scanner scanner = new Scanner(System.in);
    try {
        while (scanner.hasNextLine()){

            // do  your task here
            if (scanner.nextLine().equals("quit")) {
                scanner.close();
            }
        }

    }catch(Exception e){
       System.out.println("Error ::"+e.getMessage());
       e.printStackTrace();
 }finally {
        if (scanner!= null)
        scanner.close();
    }

尝试此代码。当您要关闭/终止扫描仪时,您应输入您的终止行。

答案 6 :(得分:0)

这就是我要做的。说明了使用常量来限制数组大小和条目数,将双精度数除以intdouble会产生double的结果,因此您可以通过仔细声明来避免某些强制转换。另外,将int分配给声明为double的对象还意味着您希望将其存储为double,因此无需强制转换。

import java.util.Scanner;

public class TemperatureStats {

    final static int MAX_DAYS = 31;

    public static void main(String[] args){

        int[] dayTemps = new int[MAX_DAYS];
        double cumulativeTemp = 0.0;
        int minTemp = 1000, maxTemp = -1000;  

        Scanner input = new Scanner(System.in);

        System.out.println("Enter temperatures for up to one month of days (end with CTRL/D:");        
        int entryCount = 0;
        while (input.hasNextInt() && entryCount < MAX_DAYS)
            dayTemps[entryCount++] = input.nextInt();

        /* Find min, max, cumulative total */
        for (int i = 0; i < entryCount; i++) {
            int temp = dayTemps[i];
            if (temp < minTemp)
                minTemp = temp;
            if (temp > maxTemp)
                maxTemp = temp;
            cumulativeTemp += temp;
        }

        System.out.println("Hi temp.   = " + maxTemp);
        System.out.println("Low temp.  = " + minTemp);
        System.out.println("Difference = " + (maxTemp - minTemp));
        System.out.println("Avg temp.  = " + cumulativeTemp / entryCount);
    }
}

答案 7 :(得分:0)

您可以通过检查长度是否为0来检查用户是否输入了空白,此外,还可以在 try-with-resources 语句中使用扫描器来隐式关闭扫描器:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        System.out.println("Enter input:");
        String line = "";
        try (Scanner scan = new Scanner(System.in)) {
            while (scan.hasNextLine()
                    && (line = scan.nextLine().toLowerCase()).length() != 0) {
                System.out.println(line);
            }
        }
        System.out.println("Goodbye!");
    }
}

示例用法:

Enter input: 
A
a
B
b
C
c

Goodbye!