2015-02-06 119 views
-1

我能得到的代碼工作,下一個挑戰是把它放在一個循環工作多次,循環,如果用戶輸入-ve號或0應該結束。 我是一個完整的初學者,請不要罵我愚蠢的代碼。我應該從哪裏開始和結束while循環這裏

package Exceptions; 

import java.util.Scanner; 

public class usrDefined { 

    public static void main(String[] args) { 

     try { 
      String s; 
      int i; 
      Scanner a = new Scanner(System.in); 
      System.out.print("Enter your Name: "); 
      s = a.nextLine(); 
      System.out.print("Enter your Age: "); 
      i = a.nextInt(); 
      while((i = a.nextInt())!= -(i = a.nextInt()) && (i = a.nextInt())!= 0) 
      if (i < 18) { 
       throw new AgeException(); 
      } 
      System.out.print("You are eligible for the deal " + s); 
     } catch (AgeException e) { 
      e.specifyException(); 

     } 
    } 
} 

class AgeException extends Exception { 
    public void specifyException() { 
     System.out.println("Sorry,you are not eligible"); 
    } 

} 
+2

'throw new AgeException();' - 爲什麼? – Maroun 2015-02-06 20:17:58

+2

它甚至編譯?你是什​​麼意思?if((a.nextInt)> 18);'? – Maroun 2015-02-06 20:18:57

+1

爲什麼不先告訴我們什麼是錯的?你聲稱有什麼事情出錯了,但沒有提及它是什麼。另外,當你只是使用if語句時,看起來好像你正在拋出一個異常。例外是*特殊行爲*。 – tnw 2015-02-06 20:18:59

回答

2

我不確定那個例外意味着什麼或者甚至有人嘗試過。如果你只是希望檢查一個值小於18,你可以做一個簡單的if聲明:

String s; 
int i; 
Scanner a = new Scanner(System.in); 
System.out.println("Enter your Name: "); 
s = a.nextLine(); 
System.out.println("Enter your Age: "); 
i = a.nextInt(); 

if (i < 18) { 
    System.out.println("Sorry,you are not eligible"); 
    // presumably exit the application here as well? 
} else { 
    System.out.println("You are eligible for the deal!!!"); 
    // presumably continue with other logic here as well? 
} 

一般來說,從未使用邏輯異常流動。有條件的結構(通常爲if聲明)就是爲此目的而存在的。應該使用異常退出處於故障狀態的方法或操作,以便使用該方法或操作的代碼可以響應該故障狀態。檢查用戶的年齡不是故障狀態,它只是業務邏輯。


至於爲什麼你有「不工作」的代碼,有幾個問題...

這條線將立即退出的代碼塊:

throw new AgeException(); 

這是因爲它引發異常。所以沒有什麼後,該行將執行。該代碼將立即轉到catch區塊,因此期望的行爲將是從未提示用戶輸入,並且始終立即告知用戶符合交易條件。

此外,有三個錯誤的位置:

if ((a.nextInt) > 18); 

第一個錯誤是,有在這方面沒有a變量。該變量位於main方法中。所以它需要傳遞給那個specifyException方法來使用它。

第二錯誤是分號。除非編譯器會在語法上抱怨它(我對Java的瞭解還不夠熟悉),它基本上會使整個if塊無效,因爲它代表一個空語句。所以整個模塊轉換爲「如果數值大於18,則什麼也不做」。

第三個錯誤是您忘記了nextInt()的括號。

最後,即使你不要立即拋出異常,你無處可以撥打specifyException方法。所以這個邏輯永遠不會被調用。如果對於你在哪裏或如何調用這種方法似乎很不直觀,那是因爲它處於例外狀態,並且使用邏輯流的異常本質上是不直觀和錯誤的:)

2

這不是異常情況。當你throw出現異常時,異常情況已經發生;你正在報告它。因此,使用此代碼,只要輸入try塊,就會自動生成異常條件。此外,該條件未在異常類定義中的特殊specifyException方法中指定。另外,當你捕捉到異常時,就是當異常情況被處理時,而不是在沒有發生異常情況時。

爲了讓您的AgeException這方面的工作:

  1. 頂部取下throw聲明。
  2. 一旦您從用戶輸入中捕獲了年齡,然後使用正常的if條件測試年齡。在if區塊內,拋出一個AgeException的實例。
  3. if塊之後,但仍在try塊中,打印出您的「您有資格」消息。如果沒有拋出異常,則用戶是「合格的」。
  4. 捕捉異常時,打印「不符合條件」的消息。

但是,在這裏使用例外似乎並不正確。年齡小於18歲的人對我來說似乎不是特別的條件。一個簡單的if/else在這裏是一個更好的設計。

+0

謝謝你協助rgettman。我知道異常不是很好的匹配,但這是我的教授給出的一個小小的任務 – 2015-02-06 20:43:29

+0

我猜想,所以我提供了關於如何使用AgeException工作的技巧。 – rgettman 2015-02-06 20:46:25

0

拋出一個異常是不需要或不錯的設計。我認爲這是你想要什麼:

public static void main(String[] args) { 
    Scanner a = new Scanner(System.in); 
    System.out.println("Enter your Name: "); 
    String s = a.nextLine(); 
    System.out.println("Enter your Age: "); 
    int i = a.nextInt(); 
    if (ageOk(a)) { 
     System.out.println("You are eligible for the deal!!!"); 
    } 
} 

private static boolean ageOk(int age) { 
    return age > 18; 
} 
0

我不知道如果這handleing使用的例外是正確的,但你可以試試這個:

UsrDefined.java

package exceptions; 

import java.util.Scanner; 

public class UsrDefined { 



    public static void main(String[] args) { 

    try{ 
     System.out.print("Enter your age:"); 
     Scanner a = new Scanner(System.in); 
     checkAge(a); 
    }catch (AgeException e){ 
     System.out.println(e.getMessage()); 
    } 
} 
    private static void checkAge(Scanner a) throws AgeException { 

     if(a.nextInt() < 18) { 
      throw new AgeException("You are not eligible for the deal!"); 
      } 

    } 


} 

AgeException.java

package exceptions; 

public class AgeException extends Exception { 

    private static final long serialVersionUID = 1L; 

    public AgeException(String msg) { 
     super(msg); 
    } 

} 
+0

拋出新的AgeException(「你沒有資格達成交易!」);沒有可以訪問UsrDefined類型的封閉實例。必須使用封閉的UsrDefined類型的實例來限定分配(例如,x.new A(),其中x是UsrDefined的實例)。 – 2015-02-06 21:21:17