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);
他们没有工作......程序继续并且与初衷混淆,
答案 0 :(得分:22)
问题是程序(像你的程序)不知道用户已完成输入输入,除非用户......某种方式......告诉它。
用户可以通过两种方式执行此操作:
输入“文件结束”标记。在UNIX和Mac OS上(通常) CTRL + D ,在Windows上 CTRL + Z 。这将导致hasNextLine()
返回false
。
输入一些程序识别为“我已完成”的特殊输入。例如,它可能是一个空行,或某些特殊值,如“退出”。该程序需要专门测试。
(您还可以想象使用计时器,并假设用户已经完成,如果他们没有输入任何输入N秒或N分钟。但这不是一个用户友好的方式来做到这一点。 )功能
您当前版本失败的原因是您使用==
来测试空字符串。您应该使用equals
或isEmpty
方法。 (见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)
这就是我要做的。说明了使用常量来限制数组大小和条目数,将双精度数除以int
是double
会产生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!