对象-Java INPUT 语句的奇怪状况

问题描述

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

依次输入1,2,3,4,5结果为:

解决方案三:

程序可以这么改,在int length=input.nextInt();下面加这行input.nextLine();让他去接收那个换行即可。
部分代码如下:

时间: 2024-12-31 15:57:01

对象-Java INPUT 语句的奇怪状况的相关文章

使用命令对象代替switch语句的写法示例

这篇文章主要介绍了使用命令对象代替switch语句的写法示例,JS规范里面是禁止使用switch语句的,使用命令对象可以完美的解决这个问题,需要的朋友可以参考下 曾经有人说过,真正好的程序是没有if..else的,当然switch还不如if..else.JS规范里面是禁止使用switch的. 命令对象(command object)就完美的解决了这个问题. 引用一篇国外的博客提到的: JavaScript 有着良好的控制流程语句,这些语句往往用花括号包裹着.不过有个例外:switch - cas

设计-简单的JAVA循环语句问题

问题描述 简单的JAVA循环语句问题 如何设计一个循环,让用户在输入0的时候跳出循环,输入其他数字的时候启动循环体? (细节:运行完循环之后,需要再接受用户输入.直到用户输入0,才结束循环) 解决方案 Java的循环语句 Java 的循环语句有for,while 和 do-while .这些语句创造了我们通常所称的循环(loops).你可能知道,一个循环重复执行同一套指令直到一个结束条件出现.你将看到,Java 有适合任何编程所需要的循环结构. 1. while 语句 while 语句是Java

java类的问题-关于java throws语句的问题

问题描述 关于java throws语句的问题 下面两个类中分别有一个throws方法,在第一个类中的throws方法中没有声明throws抛出异常,在第二个声明了throws抛出异常,执行两个类,结果相同.而第二个类中throws方法声明的throws抛出异常有什么用啊,这样写不是麻烦了吗,还不如第一个简便啊? 解决方案 在java中使用Throws和Throw语句 解决方案二: 第一张图片的编码,你确定能通过编绎?还有抛异常,最好本身解决,天天抛给别人调用时,再处理,这样不怎么好,至少我感觉

java中语句char mychar=10是合法的吗?

问题描述 java中语句char mychar=10是合法的吗? java中语句char mychar=10是合法的吗?按照我的理解,10在java中默认为int型,把一个int型赋值给char不会发生自动类型转换,所以是不合法的.可是书上却出现了这条语句,难道我的理解是错误的吗? 解决方案 合法滴,在表示数字的字符是可以不用加引号 解决方案二: 合法的,char本身就是用一个字节的整型存储的,你把mychar=81再把mychar打印出来会发现打印的是A,去看看asc2码表你就明白了 解决方案

hibernate配置-使用注解生成的uuid.hex 调用save()保存对象不发语句也不报错

问题描述 使用注解生成的uuid.hex 调用save()保存对象不发语句也不报错 @Id @GenericGenerator(name=""systemUUID""strategy=""uuid"") @GeneratedValue(generator=""systemUUID"") @Column(name = ""ID"" unique =

这个c++的语句好奇怪,看不懂,求助

问题描述 这个c++的语句好奇怪,看不懂,求助 int **C=new int *[L]; int **S=new int *[L]; for(int i=0;i<L;i++) { C[i] = new int[L]; S[i] = new int[L]; } 解决方案 你可以把C和S看成2围数组 那么它每个成员都是一围数组 解决方案二: 首先你new的是指针数组,C,S分别指向了一个数组,其元素为L个int*的指针. 下面的for循环是为了给数组内的每一个指针开辟空间.其中C[i] S[i]为

java-新手问题 JAVA for语句

问题描述 新手问题 JAVA for语句 可能有点幼稚,不过实在是不明白--敢问下面这个语句的具体执行过程是什么样子的? for (i = 0, j = 0; i < 10; i++) j += j++; 解决方案 你好,你这段代码是没有太多实际意义的,个人认为你是写错了吧,从程序运行来看,结果全为0.如图:稍微改改就好了,j += j++;改成j += ++j;执行过程如下(以修改后的函数为例): ① i = 0, j = 0 -->判断 i 是否<10 -->是-->++

怎用JAVA写语句向数据库插入数据呢?

问题描述 create table student(id int,name nvarchar(7),age nvarchar(5))怎用JAVA写语句向表里插入数据呢? 问题补充:执行后数据没插进数据库哦 解决方案 String user = "root"; //用户名 String pass = "root"; //密码看看你的用户名.密码对不对.解决方案二:drop table student ;create table student ( id int pri

Java条件语句if的使用方法介绍

1.Java条件语句之 if   语法: 执行过程:     如:     注意哦:如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的喽~~ 2. if-else if-else 语句的操作比 if 语句多了一步:  当条件成立时,则执行 if 部分的代码块: 条件不成立时,则进入 else 部分.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S ,否则罚做 500 个俯卧撑.   语法: 执行过程:     如: 3.多