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 は、独自のデータに対して実行されるさまざまなクエリです。

私のログイン機能は、彼らが自分のデータにアクセスできるように、彼らが誰であるかを確認することです. 検証に合格すると、入力された ID 番号を返し、それを他の関数 (1-7) に渡すことができます。

私の if-else ステートメントでは、パスワードが一致した場合は ID 番号を返し、null失敗した場合は返すようにします。

私はそれintができないことを知っていますnullが、このメソッドの戻り値の型はintどうすればよいですか? 割り当てをタイムリーに完了するために、条件が一致しない場合は値 0 を返し、ログインが失敗したことを示します。しかし、私にとってより重要なのは、優れた Java プログラマーになることなので、次のことを知りたいです。

  1. これを行うより良い方法はありますか?と
  2. あるので、どうすればいいですか?

ありがとう!

4

7 に答える 7

2

プリミティブ型で関数を宣言するときはいつでも、値を返すか、例外をスローする必要があります。Boolean、Integer、Long などのラッパー タイプを使用して null を返すことができます。これは、これらが Java の「実際の」オブジェクトであるためです。

于 2013-06-04T00:15:51.927 に答える
0

本当に賢明であるためには、2 つを別のメソッドに配置して、クエリから戻り値を分離する必要があります。null を返すには、メソッドから ADT(Abstract Data type) などのクラスを返す必要があります。ただし、使用するたびに null にリセットするクラス Integer の変数を使用して 0 ゼロを null として単純にフラグを立てることができる場合、それは非常に複雑になる可能性があります。 Integer" 変数を null として使用するか、メソッドから int として返される数値にリセットすることを含みます。

于 2013-06-04T01:17:11.580 に答える
0

メソッドの戻り値の型が の場合、intを返す必要intがあります。エラーが発生したことを示すには、それ以外の場合は無効な値を返すか、例外をスローします。

于 2013-06-04T00:15:58.647 に答える
0

メソッドから戻らない最善の方法は、代わりに例外をスローすることです。null や 0 などのエラー値を返すと、チェックを忘れるとバグのあるコードになります。例外は明確であり、無視できません。

于 2013-06-04T00:17:52.153 に答える