第一谍憔、先執(zhí)行nextLine(),后執(zhí)行nextInt()
閱讀demo主籍,在控制臺习贫,先用nextLine()讀取姓名,后用nextInt()讀取年齡
@Test
public void nextInt1(){
Scanner sc = new Scanner(System.in);
// 先讀取鍵盤輸入的字符串,姓名
System.out.println("input name :");
String name = sc.nextLine();
// 后讀取鍵盤輸入的int值千元,年齡
System.out.println("input age :");
int age = sc.nextInt();
System.out.println("age = " + age + " name =[" + name + "]");
System.out.println("execute finish !");
}
先讀取一行字符串苫昌,然后再讀取一個int類型常量,程序顯示正常诅炉,正確結(jié)束;(綠色是手動輸入的)
第二蜡歹、先執(zhí)行nextInt(),后執(zhí)行nextLine()
閱讀demo涕烧,先用nextInt()讀取年齡,后用nextLine()讀取姓名
@Test
public void nextInt2(){
Scanner sc = new Scanner(System.in);
// 先讀取鍵盤輸入的int值,年齡
System.out.println("input age :");
int age = sc.nextInt();
// 后讀取鍵盤輸入的字符串汗洒,姓名
System.out.println("input name :");
String name = sc.nextLine();
System.out.println("age = " + age + " name =[" + name + "]");
System.out.println("execute finish !");
}
程序運(yùn)行中议纯,當(dāng)我輸入26后,回車溢谤。程序自動執(zhí)行結(jié)束了U胺铩:┰堋!阀参!
沒有發(fā)生阻塞肝集,字符串還沒有輸入,程序自己就結(jié)束了蛛壳。
解釋如下:
nextInt()根據(jù)分隔符(回車杏瞻,空格等)只取出輸入的流中分割的第一部分并解析成Int,然后把后面的字節(jié)傳遞下去衙荐。
所以捞挥,上圖鍵盤實(shí)際輸入是"26+回車",nextInt讀出了"26"忧吟,并留下了"回車"砌函,接著netxLine()讀到了一個“回車”,這是字符串的結(jié)束判定符溜族,所以讀到的字符串就是空字符串""讹俊。
上述的代碼,將 "26 kejun"整體輸入
第一行輸入煌抒,"26空格kejun" 回車劣像,nextInt()讀取了26,遇到空格摧玫,
然后就把"kejun+回車"傳遞下去耳奕,接著netxLine()讀取到了"kejun+回車"。
最后netxLine()讀到這個回車诬像,字符串的結(jié)束判定符屋群,程序執(zhí)行完畢。
第三坏挠、結(jié)論
需要從鍵盤輸入多個參數(shù)芍躏,盡量把nextLine()放前面,nextInt()放后面降狠,實(shí)在不行了对竣。
- 方法1、nextInt()要跟一個nextLine()“消化”掉那個多余的字符串榜配。
@Test
public void nextInt3(){
Scanner sc = new Scanner(System.in);
System.out.println("input age :");
int age = sc.nextInt();
sc.nextLine();//增加這一行來接收回車,僅僅就增加這一句 ok!
System.out.println("input name :");
String name = sc.nextLine();
System.out.println("age = " + age + " name =[" + name + "]");
System.out.println("execute finish !");
}
- 方法2否纬、都用nextLine()接收然后用代碼做類型轉(zhuǎn)換處理。
注意:從控制臺輸入的都是字符串蛋褥,nextInt()僅僅是做了一次轉(zhuǎn)換临燃,將字符串?dāng)?shù)字轉(zhuǎn)換為int類型