今天開始學Java 菜鳥對Scanner的迷惑

2021-08-16 08:47:08 字數 557 閱讀 5946

本菜鳥初學scanner這個類,對於hasnext()和nextline()這兩個函式弄的不是很清楚(我的重點一直很迷),後面通過實驗發現,如果程式裡面沒有while(sc.hasnext()){}這個迴圈的話,對於string s = nextline()這一條函式來說的話就只能取一次值(這裡的一次值是指使用者輸入有效字元開始到按回車結束的字串),若有hasnext()這個函式存在,則s可以被賦值多次。當然這裡可以使用for迴圈,然後使用陣列迴圈賦值。

貼一下解釋:

asnext系列方法只會判斷你緩衝區中的資料是否符合某種型別,而不會取出,所以當你下次迴圈這個方法發現緩衝區中還有資料,會繼續判斷緩衝區中的資料,所以產生了死迴圈,只有用next()方法吧緩衝區中的資料接收掉,它就會重新向使用者傳送輸入請求了

hasnext()可能還會造成死迴圈,解決辦法也貼一下:

scanner sc = new scanner(system.in);

while(!sc.hasnext("0")){

sc.next();

其實還有一種方法解決死迴圈,感覺太複雜了超出本菜鳥的理解範圍了,所以就不貼了。呵呵

今天開始學Java 排序演算法之堆排序

大頂堆用於公升序排列 經過多次比較把最大的元素放到根結點 相當於找到序列裡面的最大元素 然後再將這個最大元素放到葉結點,這個葉結點就固定不動了,繼續比較其它結點,從剩下的結點裡面供乙個最大元素出來放到根結點,依次迴圈。public class insertsort change the top to...

今天開始學Java 排序演算法之歸併排序

思路 它的最直觀的想法是將兩個有序子串行通過從左到右兩兩元素相互比較的排序的方法,那麼如果使兩個子串行有序呢,那就再將這兩個子串行兩兩分,一直分下去的話最後就得到長度為1的各個子串行,這時就相當於每個子串行都是有序的了,最後按照之前的最直觀的想法兩兩比較合併。甩上 來 public static v...

今天開始學Java 開發乙個座標計算工具

開發乙個座標計算工具,a表示向左移動,d表示向右移動,w表示向上移動,s表示向下移動。從 0,0 點開始移動,從輸入字串裡面讀取一些座標,並將最終輸入結果輸出到輸出檔案裡面。輸入 合法座標為a 或者d或者w或者s 數字 兩位以內 座標之間以 分隔。非法座標點需要進行丟棄。如aa10 a1a yad ...