2013-06-04 121 views
1
public static int logIn(Statement stmt){ 
    int id; 
    String pw; 
    String select; 
    boolean match; 

    System.out.print("userID: "); 
    id = input.nextInt(); 
    input.nextLine(); 
    System.out.print("password: "); 
    pw = input.next(); 
    input.nextLine(); 

    select = "SELECT user_id, password FROM login WHERE user_id = " + id; 

    try{ 
     ResultSet rs = stmt.executeQuery(select); 
     while(rs.next()){ 
      if(id == rs.getInt(1) && pw.equals(rs.getString(2))){ 
       match = true; 
      } 
     } 
    } 
    catch(SQLException logfail){ 
     logfail.printStackTrace(); 
     System.out.println("could not print password"); 
    } 

    if(match == true) 
     return id; 
    else break; 
} 

在我的程序中,用戶將輸入他們的登錄信息。然後他們將面對一個菜單,在其中選擇1-7選項。選項1-7只是各種查詢,將在他們自己的數據上運行。如何不返回任何返回類型爲int的方法

我的登錄功能是驗證他們是誰,以便讓他們訪問他們自己的數據。如果驗證通過,我會返回它們輸入的ID號碼,以便我可以將它傳遞給其他功能(1-7)。

在我的if-else語句中,如果密碼匹配,我希望它返回ID號,如果失敗則返回null

我知道int不能是null但我的返回類型爲這種方法是int所以我該怎麼辦? 爲了及時完成我的任務,如果事情不匹配,我將返回值0,表示登錄失敗。但是,對我來說更重要的是成爲一名優秀的Java程序員,所以我想知道:

  1. 有沒有更好的方法來做到這一點?和
  2. 既然有,我該怎麼做,怎麼做?

謝謝!

回答

0

如果你聲明瞭一個int類型的方法,它必須返回一個int類型。只需聲明/定義一個invalid_return變量,如果找不到匹配項,將返回該變量,這很簡單。

3

您可以進行的最簡單的更改是返回Integer並返回nullInteger是一個對象,這就是爲什麼你可以做到這一點。

或者,如果發生錯誤而無法登錄,則可以引發異常。這可能不是一個特例,所以這可能不是最好的方法。

你可能做的最好的事情是不返回一個int/Integer。相反,有一個代表接下來要做的事的類。

2

無論您何時聲明具有原始類型的函數,都必須返回值或拋出異常。您可以使用包裝類型:Boolean,Integer,Long等來返回null,因爲這些是Java中的「真實」對象。

0

當一個方法返回類型爲int時,那麼你必須返回一個int。爲了表明發生了錯誤,您可以返回一個否則無效的值或拋出一個異常。

0

不從方法返回的最好方法是拋出異常。當人們忘記檢查錯誤值時,返回錯誤值如空或零導致錯誤的代碼。一個例外是明確的,不能被忽略。

3

返回零,或負值如-1是一種可能性。您也可以創建一個檢查異常LoginException,這是在無效的登錄憑證的情況下引發的。這種方法的好處在於,您可以在LoginException內記錄故障登錄嘗試的好方法。

0

真的是明智的,你應該分開你的回報號碼與你查詢通過把兩個不同的方法。 要返回null,您需要從方法返回一個類,例如ADT(抽象數據類型)。 但是,如果您可以簡單地將0零標記爲null,並且在每次使用之前將其重置爲null,那麼您可以簡單地將其標記爲null,因此如果它返回零,則只需要放入一個if-else來測試「Integer」變量爲null或包含重置爲從方法返回的int數字。