java中input.nextLine()的作用

import java.util.Scanner;
public class InputChecker
{
private Scanner input;
public InputChecker()
{
input = new Scanner(System.in);
}

public int getNextInt(String prompt)
{
System.out.println(prompt);
int number = 0;

while(!input.hasNextInt())
{
System.out.println("That was not an integer.");
System.out.println(prompt);
input.nextLine();
}
number = input.nextInt();
input.nextLine();
return number;
}

public double getNextDouble(String prompt)
{
System.out.println(prompt);
double number = 0.0;

while(!input.hasNextDouble())
{
System.out.println("That was not a number.");
System.out.println(prompt);
input.nextLine();
}

number = input.nextDouble();
input.nextLine();
return number;

}
}
1.开头的scanner为什么要用private再初始化,不能直接写scanner input = new Scanner(System.in); 吗?
2.getNextInt方法里面,倒数第二行为什么要再加一句input.nextLine(); getNextDouble也倒数第二行也加了这一句。我运行的时候发现不加的话输入错误数值后会自动给出两遍“that was not an integer",加了以后就不会有了。可是我不懂为什么要加在这里?

纠正一下,
1、private修饰符你可以不加,默认为protected,加了private就是考虑java的封装性
public InputChecker()是你的类的构造方法,就是你new一个这类,直接在这类进行类的初始化

2、input.nextLine();是读取你输入的字符串,在结尾加上这句,是为了读取下一个行分隔符,不让缓存数据干扰到你的结果
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-27
第一个问题,可以直接写的,那样代表在声明的时候直接初始化,用不用private没关系,private只是一个访问修饰符,访问修饰符的作用,建议你再翻翻书。
第二个问题,nextLine在这里的作用只是跳过一行,让你下次输入的时候,重启一行输入吧,你可以把代码删减掉一些,做下测试看看就知道了
第2个回答  推荐于2018-02-27
1、开头的scanner对象input放在实例域中,是类的成员变量,一般加private访问修饰符;
如果直接写scanner input = new Scanner(System.in); 的话,这个scanner对象就不是类的成员变量而是局部变量了。可根据需要具体选择scanner的变量类型。
2、你这个程序的功能是输入一个字符串判断是否是int型数或double型数,所以在getNextInt方法hegetNextDouble方法中在用nextline()方法读取输入的字符串后判断,这是在该方法中第一次使用nextlne();
倒数第二行的nextlie()方法是在你判断得知该输入是int型后,在输出该数值后,还必须要用nextline()把输入流中的当前已判断过的这个输入读走,否则输入流没有被清空,下次还会读取这个旧的输入,而不是你下次新的输入。追问

类的成员变量和局部变量的区别?不好意思我是在国外学的,看不太懂部分概念

追答

类的成员变量就是实例域,也叫字段。
在一个class中主要有这样几部分:1.构造方法,就是该方法的构造器,一般在方法中初始化类的成员变量;
2.普通方法,就是类的功能;
3.实例域,由成员变量组成。
局部变量:比如你在类的某个方法中要用到一个int型的变量叫做salary,你可以立即定义它并立即使用,但是它的作用域只是在你定义它的这个语句块中或当前类中
这时就在需要的位置写 int salary = 0;
比如以下这段代码:
class Employee
{
private int salary1; //实例域的成员变量

public Employee(int input) //构造器
{
salary1 = input; //在构造器中为成员变量salary1赋值
}

public void doSomething()//普通方法
{
int salary2; //定义局部变量
salary2 = 100; //为局部变量赋值
}
}

在这里,salary1就是类的成员变量,一般在构造方法中初始化;
salary2就是局部变量,作用域是doSomething()方法域

本回答被提问者和网友采纳