问题描述
- Java INPUT 语句的奇怪状况
-
以下是我在完成老师作业时候遇上的问题,希望能够得到解答,感谢!(问题在中间的comment里面描述)public static void main(String[] args) { //construct the first flight object Scanner input=new Scanner(System.in); System.out.println("Please enter the information regarding the first flight"); System.out.println("Please enter the flight number:"); String number = input.nextLine(); System.out.println("Please enter the origin of the flight:"); String origin = input.nextLine(); System.out.println("Please enter the destination of the flight"); String destination = input.nextLine(); System.out.println("Please enter the departure time in hh:mm format"); Time time=new Time(input.nextLine()); System.out.println("Please enter the length of the flight in minutes"); int length = input.nextInt(); flight first=new flight(number,origin,destination,time,length); //运行到此处,下面第一条获取number2的code没有运行,直接运行的第二条获取origin2的code,为什么? System.out.println("Please enter the flight number:"); String number2 = input.nextLine(); System.out.println("Please enter the origin of the flight:"); String origin2 = input.nextLine(); System.out.println("Please enter the destination of the flight"); String destination2 = input.nextLine(); System.out.println("Please enter the departure time in hh:mm format"); Time time2=new Time(input.nextLine()); System.out.println("Please enter the length of the flight in minutes"); int length2 = input.nextInt(); flight second=new flight(number2,origin2,destination2,time2,length2);
解决方案
解决方案二:
nextInt()读入一个整型字符,不读入'n';
nextInt读入一行文本,读入'n',但'n'不会成为返回的字符串的一部分。
int length=input.nextInt();
你在输入数字的时候,会输入“数字+回车”,这时候,数字部分就又input.nextInt()获取,而回车(相当于'n')就会由下一个input.nextLine()获取。
这样就造成了“跳过”这行(String number2=input.nextLine())的假象。其实并没有跳过,只不过输入了空行。测试如下:
package org.tarena.test;
import java.sql.Time;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//construct the first flight object
Scanner input=new Scanner(System.in);
System.out.println("Please enter the information regarding the first flight");
System.out.println("Please enter the flight number:");
String number = input.nextLine();
System.out.println("Please enter the origin of the flight:");
String origin = input.nextLine();
System.out.println("Please enter the destination of the flight");
String destination = input.nextLine();
System.out.println("Please enter the departure time in hh:mm format");
//Time time=new Time(input.nextLine());
System.out.println("Please enter the length of the flight in minutes");
int length = input.nextInt();
//flight first=new flight(number,origin,destination,time,length);
//运行到此处,下面第一条获取number2的code没有运行,直接运行的第二条获取origin2的code,为什么?
System.out.println("Please enter the flight number:");
String number2 = input.nextLine();
System.out.println("Please enter the origin of the flight:");
String origin2 = input.nextLine();
// System.out.println("Please enter the destination of the flight");
// String destination2 = input.nextLine();
// System.out.println("Please enter the departure time in hh:mm format");
// Time time2=new Time(input.nextLine());
// System.out.println("Please enter the length of the flight in minutes");
// int length2 = input.nextInt();
// flight second=new flight(number2,origin2,destination2,time2,length2);
System.out.println(number+","+origin+","+destination+","+length+","+number2+","+origin2);
System.out.println(number2);
System.out.println(origin2);
}
}
解决方案三:
程序可以这么改,在int length=input.nextInt();下面加这行input.nextLine();让他去接收那个换行即可。
部分代码如下: