Java:使用Scanner获取输入在多次使用时不起作用

时间:2015-06-07 01:51:18

标签: java string input user-input

在我的下面的代码中,扫描仪在多次使用该方法后无法工作,我无法弄清楚原因。

public static void stockAccount(StockAccount uStock){
    System.out.println("\nWelcome to the Stock Account Management System");
    int input = 1;
    String[] options = {"Find the price of a stock", "Display your portfolio", 
            "Buy stock", "Sell stock", "View a graph of your portfolio value", "View your account history", "Exit"};
    String symbol;
    int shares;
    while(input != 7){
        input = NumberedMenu("Enter the operation you would like to access", options);
        if(input == 1){
             System.out.println("Enter the symbol of the stock you would like to find information on.");
             String str = a.nextLine();
             uStock.displayStockPrice(str);
        }
        else if(input == 2){
            uStock.display();
        }
        else if(input == 3){
            System.out.println("\t\tBUY A STOCK:\nEnter the stock symbol for the stock you would like to purchase");
            symbol = a.nextLine();
            if(uStock.makeStock(symbol) == null)
                System.out.println("Error: You did not enter a valid symbol. " + ERROR);
            else{
            System.out.println("Enter the number of shares you would like to buy");
            shares = a.nextInt();
            if(shares < 1){
                System.out.println("Error: You can only purchase a positive number of shares. " + ERROR);
                break;
            } System.out.println("Enter the max price you are willing to pay for this purchase");
            int max = a.nextInt();
            uStock.buy(symbol, shares, max);
            }
        }
        else if(input == 4){
            System.out.println("\t\tSELL SHARES:");
            System.out.println("Enter the symbol of the stock you would like to sell");
            symbol = a.nextLine();
            System.out.println("Enter the number of shares you want to sell");
            shares = a.nextInt();
            System.out.println("Enter the minimum price you want each stock to sell for");
            double price = a.nextDouble();
            uStock.sell(symbol, shares, price); 

        }

        else if(input == 5){
            System.out.println("Not currently implemented");
        }

        else if(input ==6){
            System.out.println("\t\tHISTORY:");
            for(String s : uStock.readFile("stock_transaction_history.txt"))
                System.out.println(s);
            System.out.println();
        }
        else if(input == 7){
            break;
        }
    }
}

方法NumberedMenu接受两个参数,一个String和一个String数组,并打印出String作为标题,数组元素作为用户输入菜单的选项。每次while循环运行时都会运行,没有错误。但是在循环的第一次迭代之后,用户输入一个输入并被移动到适当的条件,当循环再次运行并且他们输入他们的选择时,Scanner方法允许他们输入他们自己的值/字符串/无论是什么&#39 ; t work,它直接跳到下一行代码。运行此代码的输出如下:

请稍等片刻,同时从Yahoo!获取股票数据金融...

我们的记录显示以前没有来自此位置的活动。一个新的银行账户和 现在正在为您制作股票账户。

欢迎使用帐户管理系统

请选择要访问的帐户

  1. 股票投资组合账户

  2. 银行帐户

  3. 退出

  4. 您的选择:1

    欢迎使用股票账户管理系统

    输入您要访问的操作

    1. 查找股票的价格

    2. 展示您的投资组合

    3. 购买股票

    4. 卖股票

    5. 查看投资组合价值图表

    6. 查看您的帐户历史记录

    7. 退出

    8. 您的选择:1

      输入您想要查找信息的股票代码。

      Ť

      目前T价:34.57美元

      输入您要访问的操作

      1. 查找股票的价格

      2. 展示您的投资组合

      3. 购买股票

      4. 卖股票

      5. 查看投资组合价值图表

      6. 查看您的帐户历史记录

      7. 退出

      8. 您的选择:3

            BUY A STOCK:
        

        输入您要购买的股票的股票代码

        Ť

        输入您想要购买的股票数量

        4

        输入您愿意为此次购买支付的最高价格

        900

        以138.28美元的价格成功购买了4股T股。

        输入您要访问的操作

        1. 查找股票的价格

        2. 展示您的投资组合

        3. 购买股票

        4. 卖股票

        5. 查看投资组合价值图表

        6. 查看您的帐户历史记录

        7. 退出

        8. 您的选择:3

              BUY A STOCK:
          

          输入您要购买的股票的股票代码

          错误:您没有输入有效的股票代码。

          错误:您没有输入有效的符号。操作中止。

          输入您要访问的操作

          1. 查找股票的价格

          2. 展示您的投资组合

          3. 购买股票

          4. 卖股票

          5. 查看投资组合价值图表

          6. 查看您的帐户历史记录

          7. 退出

          8. 您的选择:

            请注意,购买股票后,一旦再次调用该方法并且它进入相同的条件,它将完全跳过Scanner方法。我不知道为什么,但这可能是我愚蠢的做法。

0 个答案:

没有答案