軟體構造 實驗二新知識(二)

2021-10-04 18:10:58 字數 1323 閱讀 6786

在完成實驗的過程中,見到了從未見過的異常:nosuchelementexception。

使用情況是方法a呼叫方法b,也呼叫方法c,在b和c中都使用了scanner,並且都進行了關閉。情況和下面的情況大致相同。

public

class

testscanner

public

void

method1()

public

void

method2()

}

錯誤提示如圖所示:

查閱部落格()之後得知,是因為system.in是靜態的,當前類中所有system物件共享,在使用close()方法時,會同時關閉scanner和system.in,而system.in關閉後嘗試再次開啟得到的值是-1,當第二個函式再次想例項化scanner時就會丟擲nosuchelementexception異常。

在中「it學習者-螃蟹」的講解中,看到了這樣一段原始碼:

在scanner 的readinput方法裡面有以下**:

trycatch

(ioexception ioe)

if(n ==-1

)scanner的next方法中有以下**:

if(needinput)

readinput()

;else

throwfor()

;throwfor中的部分**:

skipped =

false;if

((sourceclosed)

&&(position == buf.

limit()

))throw

newnosuchelementexception()

;else

throw

newinputmismatchexception()

;

梳理一下這個過程:第一次呼叫method1時,將inscanner關閉,同時也關閉了system.in,因為這個是靜態的,所以在這個類中,就被徹底關閉了。之後method2嘗試利用其進行讀入,因為已經關閉,則讀到-1,設定sourceclosed = true;

needinput = false。之後執行throwfor(),position 是當前讀取的內容在緩衝區中位置,因為讀取的是-1,因此position =0,而buf.limit()也等於0,因此就執行了throw new nosuchelementexception()。

軟體構造回顧(二)

在學習軟體構造這門課時,我們接觸到了設計模式這個概念,在最開始的學習過程中,由於沒有用到過這些模式,所以並不能接受這些模式中的各種關係和其本身的意義,但是,在經過了學習與實踐之後,我就能夠淺略地了解這些模式的內容了。這是最先講的模式,可以採用乙個模擬的思想去理解這個模式的含義 在生活中不同國家的用電...

實驗二 認識Packet Tracer軟體

一 packet tracher介紹 二 實驗任務 1 安裝packer tracer 2 利用一台型號為2960的交換機將2pc機互連組建乙個小型區域網 3 分別設定pc機的ip位址 4 驗證pc機間可以互通。三 實驗裝置 switch 2960 1臺 pc 2臺 直連線 四 實驗拓撲圖 五 實驗...

軟體工程實驗 實驗二 測試

一.實驗目的 採用黑盒測試法設計測試方案,用c語言程式設計,對該程式功能進行測試。二.實驗內容 三角形分類程式的功能是 輸入三角形的三條邊 3個整數 判斷是否能構成三角形,如能,則輸出是等邊 等腰和任意三角形的資訊。三 實驗 include 藍多多軟體工程實驗 二 using namespace s...