需要使Java程序接收多个输入

问题描述

我正在尝试创建一个Java餐厅推荐程序,并且已经使该程序适用于提出请求的个人,但是我无法明确定义如何处理多个提交。我在想我可以通过将其保存为状态并再次(自动)重新运行问题来做到这一点。或者这是一个傻瓜差事?

这是我当前的代码

NULL

解决方法

使选项用于选择0退出,1-菜单等选项。 然后,您可以执行while循环以重复该过程。让用户输入数字并依靠它们,然后可以将值分配给变量 (这就是我用来解决此类问题的方式)

,

递归如何?如果我正确理解了您的问题,则希望为用户提供重新启动推荐对话框的选项。在这种情况下,我认为递归是最优雅的,虽然也可以做一会儿循环。但是您必须将in.hasNext()设置为while循环条件。

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.print("Enter name: ");
    name = in.nextLine();

    promptRecommendation(in);
}

private static void promptRecommendation(Scanner in) {
    System.out.print("What type of cuisine do you prefer?\n" +
            "Asian\n" +
            "Greek\n" +
            "Italian\n" +
            "Persian\n" +
            "Indian\n" +
            "Cuban\n");
    cuisine = in.nextLine();

    System.out.print("What is the most you'd like to spend? ");
    budget = Double.parseDouble(in.nextLine());

    int numRestaurants = 6;
    Restaurant myRestaurants[] = new Restaurant[numRestaurants];

    myRestaurants[0] = new Restaurant("Cho","Asian",29.00,"123 Alan Shepard Lane");
    myRestaurants[1] = new Restaurant("Zeus","Greek",21.00,"456 Neil Armstrong Way");
    myRestaurants[2] = new Restaurant("Valetina","Italian",50.00,"789 Sally Ride Avenue");
    myRestaurants[3] = new Restaurant("Xerxes","Persian",35.00,"012 John Glenn Street");
    myRestaurants[4] = new Restaurant("Singh","Indian",25.00,"013 Christine Koch Avenue");
    myRestaurants[5] = new Restaurant("Obregon","Cuban",12.00,"015 Scott Crippen Lane");

    for (Restaurant myRestaurant : myRestaurants) {
        if(budget <= myRestaurant.price) {
            System.out.println(name+",I recommend "+myRestaurant.restaurantName+" an "+myRestaurant.cuisine+" restaurant located at "+myRestaurant.location);
        }
    }

    System.out.println("Would you like to get another recommendation? (yes or no)");
    if(in.next().equalsIgnoreCase("yes")){
        promptRecommendation(in);
    }
}
,

我可以想到三种方法来实现这一目标。

  1. 您事先知道客户数量: 要求用户输入客户数量,然后使用while循环进行迭代,然后询问:输入客户名称+ i
  2. 您可以使用do while并使用字符或字符串来保存答案,然后在问题末尾询问用户是否要继续,如果回答为“是”或“ y”,则过程将继续,否则它将退出。
  3. 在do内创建一个选项菜单,其中一个退出可以使您跳出循环,而其他可以成为您要提出的其他功能或问题。 示例:= 按1添加一个新用户。

按2做x件事(这将再次提示您输入用户ID和内容) 您可以使用ArrayLists和Streams保存先前的数据,并在需要时再次进行处理。

,

您首先需要了解逻辑流程的基础知识以及编程语言如何工作的基本概念。您尝试做的事情与您要实现的目标绝非同寻常。

开始了解在这种情况下do while循环必须如何工作。为3位用户推荐,请尝试以下伪代码

public static void main(String[] args){
      int numberOfUsers = 3;
      do{
            recommendForAUser();
            numberOfUsers--;
      }while(numberOfUsers >0);
}

numberOfUsers每次循环时都必须减少。在这种情况下,您试图使用3个用户进行初始化,因此需要3个推荐。

将问题中的main函数包装为一个函数,并按如下所示对其进行调用:

public static void recommendForAUser(){
      Scanner in = new Scanner(System.in);
      System.out.println("Enter name: ");
      employeeName = in.nextLine();
    
      System.out.println("\nWhat type of cuisine do you prefer?\n" +
                        "Mediterranean\n" +
                        "Burgers & Fries\n" +
                        "Chinese\n" +
                        "Cuban\n" +
                        "Indian\n" +
                        "Persian\n");
      cuisine = in.nextLine();
    
      System.out.print("What is the highest price you would to spend? ");
      budget = Double.parseDouble(in.nextLine());
      int numRestaurants = 6;
      Restaurant[] myRestaurants = new Restaurant[numRestaurants];
      myRestaurants[0] = new Restaurant("Satisfactory Pita","Mediterranean",10.00,"123 Alan Shepard Lane");
      myRestaurants[1] = new Restaurant("Three Guys","Burgers & Fries",20.00,"456 Neil Armstrong Way");
      myRestaurants[2] = new Restaurant("China Panda","Chinese",30.00,"789 Sally Ride Avenue");
      myRestaurants[3] = new Restaurant("Puerto Sagua","012 John Glenn Street");
      myRestaurants[4] = new Restaurant("Diya",40.00,"013 Chistina Koch Avenue");
      myRestaurants[5] = new Restaurant("Shiraz Kabob Cafe",15.00,"015 Scott Crippen Lane");
    
      for(Restaurant myRestaurant : myRestaurants) {
        if(budget <= myRestaurant.price && cuisine.equals(myRestaurant.cuisine)) {
          System.out.println(employeeName + ",I recommend "+ myRestaurant.name + ",a " + myRestaurant.cuisine + " restaurant located at " + myRestaurant.location);
        }
        else if(budget > myRestaurant.price && cuisine.equals(myRestaurant.cuisine)) {
          System.out.println(employeeName + ",unfortunately there are no " + myRestaurant.cuisine + " restaurants in this area that are within your price range");
        }
        else {
          System.out.println();
        }
    }

}

最后是我的两分钱,不要试图对函数中的每个作用域一次又一次地初始化同一件事,就您而言,餐馆显然是预先确定的且是静态的。我建议您将其定义在函数外部,即类变量的任何部分(读取private static Restaurant[] listOfRestaurants并将其初始化一次,并在函数内部使用它。)以理想的方式,您将拥有一个{{1 }},其中包含所有类型的餐厅。