Як нічога не вяртае для метаду з зваротным тыпам міжнар

    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 з'яўляюцца толькі рознымі запытамі, якія будуць запускаць на сваіх уласных дадзеных.

Мая функцыя Увайсці, каб пераканацца, што яны, хто яны ёсць, каб даць ім доступ да сваіх дадзеных. Калі праверка праходзіць, я вяртаю нумар дакумента, у якім яны ўвайшлі так, каб я мог перадаць яго ў іншыя функцыі (1-7).

У маім калі-інакш заявы, я хачу, каб вярнуць нумар дакумента, калі паролі адпавядаюць і вяртання Null калі гэта не ўдалося.

Я ведаю, што Int не можа быць нулявым , але мой тып якое вяртаецца значэння для гэтага метаду з'яўляецца тое, Int так што я магу зрабіць? Дзеля своечасовага завяршэння майго прызначэння, я буду вяртаць значэнне 0, калі рэчы не супадаюць, каб паказаць, што Увайсці не ўдалося. Але, што больш важна для мяне становіцца добрым Java праграміст, так што я хачу ведаць:

  1. Ці ёсць лепшы спосаб зрабіць гэта? і
  2. Так як ёсць, што я магу зрабіць і як?

Дзякуй!

1

7 адказы

Самы просты змены вы можаце зрабіць, каб вярнуцца Integer і вяртання Null . <�Код> Integer з'яўляецца аб'ектам, таму вы можаце зрабіць гэта.

У якасці альтэрнатывы, вы можаце кінуць выключэнне, калі гэта памылка, каб не быць у стане увайсці ў сістэму. Гэта, верагодна, не выключны выпадак, так што гэта можа быць не самым лепшым чынам.

Магчыма, самае лепшае, што вы можаце зрабіць, гэта не вяртае INT/Integer. Замест гэтага ёсць клас, які ўяўляе сабой рэч, каб рабіць далей.

3
дададзена

Вяртаючыся да нуля, ці адмоўнае значэнне, як -1 з'яўляецца адным з магчымых варыянтаў. Вы таксама можаце стварыць правяраеце выключэнне LoginException якога выкінулі ў выпадку недапушчальных уліковых дадзеных для ўваходу. Пра гэтага падыходу заключаецца ў тым, што ў вас ёсць добры спосаб для ўваходу няспраўнасцяў спробы ўваходу ў LoginException .

3
дададзена

Кожны раз, калі вы аб'яўляеце функцыю з прымітыўным тыпам яна павінна вяртаць значэнне або згенераваныя выключэнне. Вы можаце выкарыстоўваць тыпы абалонкі: Boolean, Integer, Long, і г.д., каб вярнуць нуль, таму што гэта «рэальныя» аб'екты ў Java.

2
дададзена

Калі метад мае тып якое вяртаецца значэння Int , то павінны вяртае Int . Для таго, каб паказаць, што адбылася памылка, вы можаце альбо вяртаць значэнне, якое ў адваротным выпадку несапраўдны або выкінуць выключэнне.

0
дададзена

Лепшы спосаб не вяртаць з метаду з'яўляецца кінуць выключэнне замест гэтага. Вяртанне значэнняў памылкі як нуль або нуль прыводзіць да багі кодзе, калі людзі забываюць праверыць іх. Выключэнне з'яўляецца адназначным і не можа быць праігнаравана.

0
дададзена

Калі вы абвясцілі метад тыпу INT, то ён павінен вярнуць Int. Проста абвясьцеце/вызначыць зменную invalid_return які будзе вернуты ў выпадку, калі супадзенне не знойдзена, проста, як гэта.

0
дададзена

На самай справе, каб быць разумным, вы павінны аддзяліць вашыя вернутыя нумары ад вас запыт шляхам размяшчэння двух розных метадаў. Каб вярнуць нуль, вам трэба вяртаць клас, такія як ADT (абстрактны тып дадзеных) з метаду. Аднак гэта можа быць занадта складаным, калі вы можаце проста сцяг 0 нуль страціўшым з зменнай класа Integer, што вы што ўстанаўліваюцца ў нуль перад кожным выкарыстаннем, так што, калі яна роўная нулю вяртаецца Вам толькі трэба пакласці ў калі-то яшчэ, каб пратэставаць " цэлы лік ", як пераменная змяшчае нуль або скіду ў лік вяртаецца як Int з метаду.

0
дададзена