2014-09-04 64 views
0

所以我只是試圖用更復雜的代碼創建一個簡單的程序。 我被要求做的是寫一個程序來控制它是一個正數還是負數(我知道,這很容易)。使用try和catch獲取輸入

什麼,我試圖做的是趕上正在輸入的內容,因此,如果它不是一個float它會說使用逗號而不是點或輸入一個數字,而不是String

package example1; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class numbritest 
{ 
public static void main(String[] args) 
{ 

    float num; 

    Scanner sisse1 = new Scanner(System.in); 
    try 
    { 
     System.out.println("Sisesta number:"); 
     System.out.println("Kaks komakohta on lubatud"); 
     num = sisse1.nextFloat(); 
    } 

    catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
    { 
     System.out.println("Kontrolli kas kasutasid koma!"); 

    } 

    if (num < 0) //kui arv väiksem 
    { 
     System.out.println("Number " +num +" on negatiivne."); 
     System.out.println("Seega on arv väiksem nullist"); 

    } 
    else //Kui arv on suurem või võrdne 
    { 
     System.out.println("Number " +num +" on positiivne."); 
     System.out.println("Positiivsed arvud on suuremad"); 
     System.out.println("või võrdsed nulliga."); 

    } 
    System.out.println(); 
    System.out.println("Programm lõpetada!"); 
    } 
    } 

對不起,這是愛沙尼亞語,但我希望你明白我的觀點。

+3

你的問題不包含問題。 – talex 2014-09-04 09:59:36

+0

對不起,問題是,如何讓它起作用? 現在它會拋出一些錯誤。 我修正它,以便如果輸入的浮點數不是浮點數(例如字符串),它只會給出錯誤並結束程序。 我希望它不會給出錯誤,所以用戶將有另一次進入浮動的機會。 我想過使用while,可能工作嗎? – 2014-09-04 10:03:37

+0

讓我嘗試猜測。你想分析錯誤,並在重新閱讀價值之前打印如何修復它的建議? – talex 2014-09-04 10:08:12

回答

0

你應該做的是創建一個循環,並要求用戶輸入數字,只要數字是不正確的: 所以這個代碼:

try 
{ 
    System.out.println("Sisesta number:"); 
    System.out.println("Kaks komakohta on lubatud"); 
    num = sisse1.nextFloat(); 
} 
catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
{ 
    System.out.println("Kontrolli kas kasutasid koma!"); 

} 

應該是在一個循環 - 例如:

boolean incorrectNumberFormat; 
do 
{ 
    incorrectNumberFormat = false; 
    try 
    { 
     System.out.println("Sisesta number:"); 
     System.out.println("Kaks komakohta on lubatud"); 
     num = sisse1.nextFloat(); 
    } 

    catch(InputMismatchException exception) //juhul kui sisestab miskit muud 
    { 
     System.out.println("Kontrolli kas kasutasid koma!"); 
     sisse1.nextLine(); 
     incorrectNumberFormat = true; //repeat the loop; 
    } 
} while(incorrectNumberFormat); 

順便說一句 - 逗號不會產生異常(我3,3沒有),但3%3應該給你的例外。 循環可以以各種方式創建,它只是一個簡單的例子。

1

更改float num;float num = 0.0f;,它應該工作正常

+0

它的工作原理如此,但仍然給出了錯誤,我希望它能通過錯誤並給用戶另一個輸入浮點數的機會。 – 2014-09-04 10:07:36

+0

在while循環中執行 – user3906612 2014-09-04 10:09:43

0

我將其更改爲

Float num = null; 

(注意,我們現在用的是Float對象,而不是原始float,所以可以null),然後使用一個while條件:

while (num == null) { 
    try { 
    //... 
    num = sisse1.nextFloat(); 
    } catch (InputMismatchException e) { 
    //give error 
    } 
} 

直到num = ...行成功爲止,這不會將任何東西放入num,所以無論何時失敗,它都會保留null。這比將其設置爲0.0f要好,否則如果用戶輸入零就會導致問題。

0

使用前初始化本地變量;
在這些情況下,編譯器認爲try塊可能會執行或不能執行,因此num.nextFloat()可能會執行,因此編譯器會拋出錯誤:變量num可能未被初始化。 這樣改變float num;浮動num = 0.0f;