java—如何允许用户通过使用扫描器功能无限地在键盘上输入内容?

w51jfk4q  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(330)

在我的代码中,我可以使用scanner功能提示用户键入一段文本,但是,我只能使其成为用户可以键入一次。要再次键入,我必须关闭终端,然后再次打开它,我如何才能使它,使我可以无限地键入,这样我就不必关闭它,然后每次重新打开它,以便再次键入?上下文,这是我的代码,它是关于一个售票机,它显示某些数据,如人名,价格,总余额等,目前我正在做的地方。这意味着我希望用户键入英格兰的任何城市,并显示一个价格。但正如我所说的,用户一次只能输入一个东西,而他们应该能够不受任何限制地输入。

import java.util.Scanner;
import java.lang.String;

public class TicketMachine
{

    private int price;

    private int balance;

    private int total;
    /**
     * Create a machine that issues tickets of the given price.
     */
    public TicketMachine(int cost)
    {
        price = cost;
        balance = 0;
        total = 0;
    }

    /**
     * @Return The price of a ticket.
     */
    public int getPrice()
    {
        return price;
    }

    /**
     * Return The amount of money already inserted for the
     * next ticket.
     */
    public int getBalance()
    {
        return balance;
    }

    /**
     * Receive an amount of money from a customer.
     * Check that the amount is sensible.
     */
    public void insertMoney(int amount)
    {
        if(amount > 0) {
            balance = balance + amount;
        }
        else {
            System.out.println("Use a positive amount rather than: " +
                amount);
        }
    }

    /**
     * Print a ticket if enough money has been inserted, and
     * reduce the current balance by the ticket price. Print
     * an error message if more money is required.
     */
    public void printTicket()
    {
        if(balance >= price) {
            // Simulate the printing of a ticket.
            System.out.println("HERE IS YOUR TICKET");

            System.out.println("# Ticket");
            System.out.println("# " + price + " cents.");
            System.out.println("You have" + balance + "left");

            // Update the total collected with the price.
            total = total + price;
            // Reduce the balance by the price.
            balance = balance - price;
        }
        else {
            System.out.println("You must insert at least: " +
                (price - balance) + " more cents.");

        }
    }

    /**
     * Return the money in the balance.
     * The balance is cleared.
     */
    public int refundBalance()
    {
        int amountToRefund;
        amountToRefund = balance;
        balance = 0;
        return amountToRefund;
    }

    public static void main(String [] args)
    {

        Scanner myScanner = new Scanner(System.in);
        String answer = myScanner.nextLine();

        if( answer.equals("London") )
        {
            System.out.println("£15");
        }
        if( answer.equals("Manchester") )
        {
            System.out.println("£20");
        }

        if( answer.equals("Brighton") )
        {
            System.out.println("£25");
        }
        if( answer.equals("Cornwall") )
        {
            System.out.println("£30");
        }
        if( answer.equals("Crystal Palace") )
        {
            System.out.println("£35");
        }

        if( answer.equals("Chealsea") )
        {
            System.out.println("£40");
        }
        if( answer.equals("Birmingham") )
        {
            System.out.println("£45");
        }
        if( answer.equals("Liverpool") )
        {
            System.out.println("£50");
        }
        if( answer.equals("Bristol") )
        {
            System.out.println("£55");
        }
        if( answer.equals("Leister") )
        {
            System.out.println("£60");
        }
        if( answer.equals("Newcastle") )
        {
            System.out.println("£65");
        }
        if( answer.equals("Cambridge") )
        {
            System.out.println("£70");
        }
        if( answer.equals("Bradford") )
        {
            System.out.println("£75");
        }
        if( answer.equals("Leeds") )
        {
            System.out.println("£80");
        }
        if( answer.equals("Oxford") )
        {
            System.out.println("£85");
        }
        if( answer.equals("Nottingham") )
        {
            System.out.println("£90");
        }
        if( answer.equals("Peterborough") )
        {
            System.out.println("£95");
        }
        if( answer.equals("Sheffield") )
        {
            System.out.println("£100");
        }

    }
}
j2datikz

j2datikz1#

使用while true或无限循环不是一个好的做法。您可以使用do while并选中标志(例如“exit”)来关闭程序。

import java.util.Scanner;
import java.lang.String;

public class TicketMachine {

     private int price;

     private int balance;

     private int total;

     /**
      * Create a machine that issues tickets of the given price.
      */
     public TicketMachine(int cost) {
          price = cost;
          balance = 0;
          total = 0;
     }

     /**
      * @Return The price of a ticket.
      */
     public int getPrice() {
          return price;
     }

     /**
      * Return The amount of money already inserted for the next ticket.
      */
     public int getBalance() {
          return balance;
     }

     /**
      * Receive an amount of money from a customer. Check that the amount is sensible.
      */
     public void insertMoney(int amount) {
          if (amount > 0) {
               balance = balance + amount;
          } else {
               System.out.println("Use a positive amount rather than: "
                       + amount);
          }
     }

     /**
      * Print a ticket if enough money has been inserted, and reduce the current balance by the
      * ticket price. Print an error message if more money is required.
      */
     public void printTicket() {
          if (balance >= price) {
               // Simulate the printing of a ticket.
               System.out.println("HERE IS YOUR TICKET");

               System.out.println("# Ticket");
               System.out.println("# " + price + " cents.");
               System.out.println("You have" + balance + "left");

               // Update the total collected with the price.
               total = total + price;
               // Reduce the balance by the price.
               balance = balance - price;
          } else {
               System.out.println("You must insert at least: "
                       + (price - balance) + " more cents.");

          }
     }

     /**
      * Return the money in the balance. The balance is cleared.
      */
     public int refundBalance() {
          int amountToRefund;
          amountToRefund = balance;
          balance = 0;
          return amountToRefund;
     }

     public static void main(String[] args) {

          Scanner myScanner = new Scanner(System.in);

          String answer = "";

          do {

               System.out.println("Enter your city, please:");
               answer = myScanner.nextLine();

               if (answer.equals("London")) {
                    System.out.println("£15");
               }
               else if (answer.equals("Manchester")) {
                    System.out.println("£20");
               }
               else if (answer.equals("Brighton")) {
                    System.out.println("£25");
               }
               else if (answer.equals("Cornwall")) {
                    System.out.println("£30");
               }
               else if (answer.equals("Crystal Palace")) {
                    System.out.println("£35");
               }

               else if (answer.equals("Chealsea")) {
                    System.out.println("£40");
               }
               else if (answer.equals("Birmingham")) {
                    System.out.println("£45");
               }
               else if (answer.equals("Liverpool")) {
                    System.out.println("£50");
               }
               else if (answer.equals("Bristol")) {
                    System.out.println("£55");
               }
               else if (answer.equals("Leister")) {
                    System.out.println("£60");
               }
               else if (answer.equals("Newcastle")) {
                    System.out.println("£65");
               }
               else if (answer.equals("Cambridge")) {
                    System.out.println("£70");
               }
               else if (answer.equals("Bradford")) {
                    System.out.println("£75");
               }
               else if (answer.equals("Leeds")) {
                    System.out.println("£80");
               }
               else if (answer.equals("Oxford")) {
                    System.out.println("£85");
               }
               else if (answer.equals("Nottingham")) {
                    System.out.println("£90");
               }
               else if (answer.equals("Peterborough")) {
                    System.out.println("£95");
               }
               else if (answer.equals("Sheffield")) {
                    System.out.println("£100");
               }else { 
                    System.out.println("ERROR: INVALID INPUT");
              }

          } while (answer != "exit");

     }
}

ps使用switch case而不是if(){}例如

import java.util.Scanner;
import java.lang.String;

public class TicketMachine {

     private int price;

     private int balance;

     private int total;

     /**
      * Create a machine that issues tickets of the given price.
      */
     public TicketMachine(int cost) {
          price = cost;
          balance = 0;
          total = 0;
     }

     /**
      * @Return The price of a ticket.
      */
     public int getPrice() {
          return price;
     }

     /**
      * Return The amount of money already inserted for the next ticket.
      */
     public int getBalance() {
          return balance;
     }

     /**
      * Receive an amount of money from a customer. Check that the amount is sensible.
      */
     public void insertMoney(int amount) {
          if (amount > 0) {
               balance = balance + amount;
          } else {
               System.out.println("Use a positive amount rather than: "
                       + amount);
          }
     }

     /**
      * Print a ticket if enough money has been inserted, and reduce the current balance by the
      * ticket price. Print an error message if more money is required.
      */
     public void printTicket() {
          if (balance >= price) {
               // Simulate the printing of a ticket.
               System.out.println("HERE IS YOUR TICKET");

               System.out.println("# Ticket");
               System.out.println("# " + price + " cents.");
               System.out.println("You have" + balance + "left");

               // Update the total collected with the price.
               total = total + price;
               // Reduce the balance by the price.
               balance = balance - price;
          } else {
               System.out.println("You must insert at least: "
                       + (price - balance) + " more cents.");

          }
     }

     /**
      * Return the money in the balance. The balance is cleared.
      */
     public int refundBalance() {
          int amountToRefund;
          amountToRefund = balance;
          balance = 0;
          return amountToRefund;
     }

     public static void main(String[] args) {

          Scanner myScanner = new Scanner(System.in);

          String answer = "";

          do {

               System.out.println("Enter your city, please:");
               answer = myScanner.nextLine();

               switch (answer) {
                    case "London":
                         System.out.println("£15");
                         break;
                    case "Manchester":
                         System.out.println("£20");
                         break;
                    case "Brighton":
                         System.out.println("£25");
                         break;
                    case "Cornwall":
                         System.out.println("£30");
                         break;
                    case "Crystal Palace":
                         System.out.println("£35");
                         break;
                    case "Chealsea":
                         System.out.println("£40");
                         break;
                    case "Birmingham":
                         System.out.println("£45");
                         break;
                    case "Liverpool":
                         System.out.println("£50");
                         break;
                    case "Bristol":
                         System.out.println("£55");
                         break;
                    case "Leister":
                         System.out.println("£20");
                         break;
                    case "Newcastle":
                         System.out.println("£65");
                         break;
                    case "Cambridge":
                         System.out.println("£70");
                         break;
                    case "Bradford":
                         System.out.println("£75");
                         break;
                    case "Leeds":
                         System.out.println("£80");
                         break;
                    case "Oxford":
                         System.out.println("£85");
                         break;
                    case "Nottingham":
                         System.out.println("£90");
                         break;
                    case "Peterborough":
                         System.out.println("£95");
                         break;
                    case "Sheffield":
                         System.out.println("£100");
                         break;
                    default:
                         System.out.println("ERROR: INVALID INPUT");
                         break;
               }

          } while (answer != "exit");

     }
}
0mkxixxg

0mkxixxg2#

将输入和显示部分放入无限循环中,如下所示:

public static void main(String[] args) {
    Scanner myScanner = new Scanner(System.in);

    while (true) {
        String answer = myScanner.nextLine();

        if (answer.equals("London")) {
            System.out.println("£15");
        }
        //...
        if (answer.equals("Sheffield")) {
            System.out.println("£100");
        }
    }
}

请注意 while (true){...} 创建无限循环块,因为条件已设置为“始终” true . 有许多其他方法可以创建无限循环。无限循环的另一个例子:

public static void main(String[] args) {
    Scanner myScanner = new Scanner(System.in);

    for (;;) {
        String answer = myScanner.nextLine();

        if (answer.equals("London")) {
            System.out.println("£15");
        }
        //...
        if (answer.equals("Sheffield")) {
            System.out.println("£100");
        }
    }
}

然而,第二种形式很少使用,因为它看起来不自然,可能会混淆其他人。

相关问题