2017-04-04 59 views
-4

我已經寫了一個學校作業的程序。該程序將3個正整數作爲標準輸入的參數,如果三角形是等邊,等腰或斜角,則打印。 Here是代碼。其他語句正在執行的地方它不應該

該程序到目前爲止,但我沒有打算。該行25

System.out.println("Triangle sides should be positive integer "); 

應該只有當負的整數被給出時才被執行。但是,除了整數以外的類型時,它正在執行。例如,當我饋送線的文本文件「DFD 5 4 6」,則提示:

第5行 - DFD:三角形的側應爲整數 三角形邊應是正整數

但它應該只打印第一行。我已經在主函數行94和105中編寫了浮點數和字符串的else語句,但是除了else語句之外,它還在執行中。我怎樣才能避免它?

+1

請直接發佈您的代碼中的問題,而不是作爲一個外部鏈接。此外,你是否已通過打印出或在調試器中查看你的'a','b'和'c'實際上都是正數來進行視覺驗證? –

+0

爲什麼不創建'else if(a <0 || b <0 || c <0){//打印數字應該是正值}?然後'else {//做些什麼}'爲那些不是數字的。 –

+1

這可能會發生,因爲你的'int []'數組最初將初始化爲零。現在,如果您讀取的是非整數,則數組將保持爲零,並使用零創建三角形。 – JDC

回答

0

for循環的執行後,new Triangle(a[0],a[1],a[2]);將被執行並且僅當lineText沒有下一行的行103中的塊else將被執行。

爲了避免這種使用布爾變量,並將其設置在真正的線94 else塊現在把if條件線99

boolean areInvalidSides = false; 

else { // line 92 
    areInvalidSides = true; 
    System.out.printf("Line %d - %s: the side of the triangle should be an integer\n", lineNum, lineText.next()); 
} 

if(!areInvalidSides){ 
    new Triangle(a[0],a[1],a[2]); // line 99 
} 
+0

謝謝soooo多!這是工作 !!!!! – Azik

0

我認爲正面的功能應該是像下面那樣。

boolean isPositive (int a, int b, int c){ 
    if ((a<0)||(b<0)||(c<0)){ 
     return false; 
    } 
    return true; 
} 
+0

好吧,但是零的三角形邊也不是真的有效,即使它不是負面的。 (儘管我認爲如果一個值爲零,它將會影響不平等檢查。)這不是問題所在。 –

+0

我試過但結果相同。但是,謝謝你的建議。 – Azik

0

「我寫了主要功能行94和105中的浮點數和字符串的else語句。」

是的,但是您所做的只是打印一條錯誤消息,它實際上不會使用戶輸入有效數字。如果他們輸入65.8,則會打印一條消息,然後繼續嘗試製作缺少一面的三角形。這顯然不是你想要的。

也許你應該將每個輸入請求放在一個while循環中,檢查有效輸入並立即讓用戶在沒有輸入有效整數的情況下重新輸入。