2013-12-03 2 views
1

Эй, ребята, написали программу, состоящую из сервисного меню, точно так же как банковскую карту. Проблема в том, что я использовал метод, называемый doLogin, и использовал логическое значение, так что если ответ == true будет doServiceMenu else, если он ложный, я хочу, чтобы он продолжал получать doLogin.Выбор и методы вызова

Однако это не работает, и я не уверен, если это моя логика, любой обратный бы весьма признателен

`enter code here`import java.util.Scanner; 
class TopUp{ 

    //class variable 
    static Scanner scan = new Scanner (System.in); 
    static String name = "Joe"; 
    static String cardNumber = "1234 5678 9101 1213"; 
    static double balance = 0; 

    public static void main(String[] args){ 
     boolean isLoginCorrect = false; 
     isLoginCorrect = doLogin(); 

    if(isLoginCorrect == true){ 
     doServiceMenu(); 
    } 
    else if(isLoginCorrect == false){ 
      System.out.println("Incorrect username or password,try again!"); 
      System.out.println(); 
      doLogin(); 
    } 
    } 

    public static boolean doLogin(){ 

    String userName = "joe" ; 
    String password = "123456"; 
    String nameInput; 
    String pwdInput; 



    System.out.println("Please enter your Username: "); 
    nameInput = scan.nextLine(); 

    System.out.println("Please enter your Password: "); 
    pwdInput = scan.nextLine(); 

    return ((userName.equals(nameInput)) && (password.equals(pwdInput))); 

    } 

    public static void doServiceMenu(){ 

    System.out.println("<********************* Services Menu ****************>"); 
    System.out.println("<************** Please Select an option: ***********>"); 
    System.out.println("1> Customer Details"); 
    System.out.println("2> Customer Balance"); 
    System.out.println("3> Top-up"); 
    System.out.println("4> Make A Purchase"); 
    System.out.println("5> Quit"); 
    System.out.println(""); 
    System.out.println("<*************************************************>"); 

     Scanner keyboard = new Scanner(System.in); 
     String menuSelect = keyboard.nextLine(); 

     switch (menuSelect) { 

      case "1": 
        showCustomerDetails(); 
        checkIfUserWantsAnotherTransaction(); 
        break; 
      case "2": 

        printBalance(); 
        checkIfUserWantsAnotherTransaction(); 
        break; 
      case "3": 
        doTopUp(); 
        checkIfUserWantsAnotherTransaction(); 
        break; 
      case "4": 
        makePurchase(); 
        checkIfUserWantsAnotherTransaction(); 
        break; 
      case "5": 
        System.out.println("Goodbye!!!"); 
        break; 
      default: 
        System.err.println ("Unrecognized option"); 
        break; 
      } 
     } 

    public static void showCustomerDetails(){ 
     System.out.println("Name: " + name); 
     System.out.println("Card Number : " + cardNumber); 
    } 

    public static void printBalance(){ 
     System.out.println("Your balance is : " + balance); 
    } 

    public static void increaseBalance(double amount){ 
     balance += amount; 
    } 

    public static void decreaseBalance(double amount){ 
     balance -= amount; 
    } 


    public static void doTopUp(){ 
     System.out.println("Please enter a Top Up Amount: "); 
    double amount = scan.nextDouble(); 
    double maxTopUp = 1000 - balance; 

    if(amount > maxTopUp){ 
     System.out.println("Amount exceedes Max Top Up: "); 
    } 
    else{ 
     increaseBalance(amount); 
     printBalance(); 
    } 
} 

    public static void makePurchase(){ 
     System.out.println("Please enter the purchase amount: "); 
    double amount = scan.nextDouble(); 
    double purchase = amount - balance; 

    if(amount > balance){ 
     System.out.println("Sorry Insufficent Funds: "); 
    } 
    else{ 
     decreaseBalance(amount); 
     printBalance(); 
    } 
    } 

    public static void checkIfUserWantsAnotherTransaction() { 
     System.out.println("Would you Like another Service: y/n"); 
     Scanner keyboard = new Scanner(System.in); 
     String option = keyboard.nextLine(); 

    if(option.equals("y")){ 
     doServiceMenu(); 
    } 
    else if(option.equals("n")){ 
       System.out.println("Goodbye!!!"); 
     } 
    } 
} 
+0

Что именно не работает? – SudoRahul

+0

Будьте осторожны при использовании 'nextLine' после' nextXXX'. – Maroun

+0

Просто из любопытства, какие банковские карты имеют сервисное меню? – vipw

ответ

0

Если они проваливают Войти в первый раз, программа входит в этом блоке:

else if(isLoginCorrect == false){ 
     System.out.println("Incorrect username or password,try again!"); 
     System.out.println(); 
     doLogin(); 
} 

В конце этого блока программа выходит (независимо от того, был ли вход успешным или нет). Вам нужно ввести цикл вокруг doLogin(), а когда он, наконец, удастся, вызовите функцию doServiceMenu().

я бы реализовать что-то вроде этого:

while(doLogin() != true) { 
    System.out.println("Incorrect username or password,try again!"); 
} 
doServiceMenu(); 
+0

Спасибо, vipw, что делает тот же смысл, shoud я использую for for что-то вроде for (i = 0; = 0; i ++) (я знаю, что этот цикл не имеет смысла) Я просто не уверен, как цикл вызывает doLogin ? – Joe

+0

@ user3006218 Я обновил свой ответ, чтобы постоянно повторять логин до тех пор, пока он не будет успешным. Возможно, вы захотите использовать цикл for, чтобы ограничить количество неудачных попыток (хорошее учебное упражнение). – vipw

+0

Sweet !! Спасибо vipw получил программу, чтобы работать отлично спасибо за вашу помощь :) – Joe

0

Если у вас есть ошибка компиляции, происходит некорректно, не может работать в вашем коде:

String menuSelect = keyboard.nextLine(); 
switch (menuSelect) { 
    ... 
} 

Вы не можете переключиться на значение String. Вы можете переключать только int или Enums. Поэтому вы должны сначала преобразовать строку String в int.

Как что:

int menuSelect = Integer.valueOf(keyboard.nextLine()); 

    switch (menuSelect) { 

     case 1: 
      ... 

    } 
0

Try с этим внутри вашего main:

boolean isLoginCorrect = false; 
int maxAttempt = 5; 

for (int loginAttempt = 1; (isLoginCorrect) || (loginAttempt > maxAttempt); loginAttempt++) 
{ 
    isLoginCorrect = doLogin(); 
    if ((!isLoginCorrect) && (loginAttempt < maxAttempt)) 
    { 
     System.out.println("Incorrect username or password,try again!"); 
     System.out.println(); 
    } 
} 

if(isLoginCorrect == true){ 
    doServiceMenu(); 
} 
+0

Hey Lajos спасибо за ваш ответ, попробовал код, но продолжайте получать незаконное начало выражения на doLogin – Joe

+0

Можете ли вы изменить свой вопрос и добавить код так, как сейчас (включая мое предложение)? Кроме того, можете ли вы уделять больше внимания табуляции в своем коде с этого момента? –

Смежные вопросы