程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 關於hasNextInt判斷後無限循環輸出else項的解決辦法,hasnextintelse

關於hasNextInt判斷後無限循環輸出else項的解決辦法,hasnextintelse

編輯:JAVA綜合教程

關於hasNextInt判斷後無限循環輸出else項的解決辦法,hasnextintelse


話不多說,上來就是干!
import java.util.Scanner;

public class Test_hasNextInt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);			//關於hasNextInt判斷後無限循環輸出else項的解決辦法
		String next;
		int i;
		while(true) {
//			Scanner sc = new Scanner(System.in);		//第一種處理方法,把掃描器拿到裡面來,每次循環都創建一個新的掃描器.else語句裡直接提示輸入錯誤就好了
			System.out.println("請輸入一個整數");
			if (sc.hasNextInt()) {	//如果通過使用 nextInt() 方法,此掃描器輸入信息中的下一個標記可以解釋為默認基數中的一個 int 值,則返回 true。
				i = sc.nextInt();						//如果是輸入 22 33 會做兩次輸出
				System.out.println(i);
			} else {
//				next = sc.next();						//第二種處理方法,把scanner緩存裡的非int值接收掉
//				System.out.println("您輸入的是:" + next + ",請重新輸入");
				//注意:next() 查找並返回來自此掃描器的下一個完整標記 例如輸入: aa bb cc 那麼這裡會先接收aa ,然後輸出aa
				//然後再while()循環,遇到if判斷緩存裡的bb 確定不是整數後繼續走else語句輸出bb.同理輸出完cc才會停止
				//如果輸入的是 aa 22 cc,那麼先走else輸出aa, 再判斷出是22是整數走if語句,走完再次走cc才能結束
				
				String nextLine = sc.nextLine();		//第三種處理方法,算了 還是接收一行吧!
				System.out.println(nextLine);			//如果輸入 22 aaa 333 ccc 第一次會走if把22接收掉, 
														//然後遇到aaa後走esls會把後面的整行都接收掉
														//當然,正常情況下沒有sc.hasNextInt()這一個判斷的時候,
														//nextLine()會把整行都接收掉,而這裡是因為被上面的nextInt()拿走了一個22
				//所以還是看需要把.第一種雖然每次輸入都會創建一次Scanner對象,但是也算是一種合理的解決辦法!
				//總結:理解緩存,就會明白了!
			}
		}
	}

}

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved