【问题标题】:How do you have the user set the variable?你如何让用户设置变量?
【发布时间】:2022-08-02 21:25:50
【问题描述】:

我试图让用户为他们设置的数字设置名称。例如,如果他们设置为 3,则程序会询问名称 3 次,然后将这些名称设置为数组内的不同变量。

 public static void main(String[] args) {
    Scanner Num = new Scanner(System.in);
    Scanner Name = new Scanner(System.in);
    
    
    System.out.println(\"How many names do you want to enter: \");
    int number = Num.nextInt();
    int[] numbs = new int[number];
    
    for (int i = 0; i < numbs.length; i++) {
        
        System.out.println(\"What is your name\");
        
        String [] nameArray = Name.nextLine();
  • 在循环之前声明数组并使用[i] 访问第i 个元素。

标签: java arrays for-loop user-input


【解决方案1】:

只是对泰坦的答案的一个小改进。

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("How many names do you want to enter: ");
    int numberOfTimes = sc.nextInt();
    String[] names = new String[numberOfTimes];
    sc.nextLine();
    for (int i = 0; i < numberOfTimes; i++) {
      System.out.println("What is your name");
      names[i] = sc.nextLine();
    }
    System.out.println(Arrays.toString(names));
  }

【讨论】:

    【解决方案2】:

    初始点

    以下是您发布的代码中发生的几件事:

    • 您有两个不同的扫描程序,每个扫描程序都从 System.in 读取
    • 提示用户输入 (int number = Num.nextInt()) 后,您将使用该数字创建大小为“数字”的数组
    • 当您调用nextLine() 时,您将结果分配给一个字符串数组(String [])。

    工作解决方案

    这是一个解决这些问题的变体,也有一些补充:

    • 使用一个Scanner,并给它一个通用名称(“扫描器”,而不是“Num”),因为扫描器与一种特定的数据类型无关。任何扫描器都可以读取字符串、整数、布尔值、字节等。在 Javadoc 中查找支持的完整数据类型集。
    • 在尝试创建数组之前检查用户输入是否有效 - 如果用户输入“-1”,这是一个有效的整数值,但对于分配数组无效 - new int[-1]) 将抛出 java.lang.NegativeArraySizeException运行。
    • 使用“next()”而不是“nextLine()”——在您的示例的其余部分中,使用“nextLine()”会导致在没有用户直接交互的情况下跳过一行(因此第一个“名称”总是一个空字符串)
    • 将“next()”的结果分配给一个字符串(不是String[]),匹配方法的返回类型
    • 使用“System.out.print()”代替“println()”,程序输出更整洁一些
    • 使用小写名称以遵循 Java 命名约定(“扫描仪”,而不是“扫描仪”)
    Scanner scanner = new Scanner(System.in);
    
    System.out.print("How many names do you want to enter: ");
    int times = scanner.nextInt();
    
    if (times < 0) {
        System.out.println("negative numbers not allowed");
    } else {
        String[] names = new String[times];
        for (int i = 0; i < times; i++) {
            System.out.print("What is your name: ");
            names[i] = scanner.next();
        }
        System.out.println(Arrays.toString(names));
    }
    
    

    这是一个示例运行:

    How many names do you want to enter: 3
    What is your name: one
    What is your name: two
    What is your name: three
    [one, two, three]
    

    【讨论】:

      【解决方案3】:

      在循环外创建一个数字长度的字符串数组,并使用名称作为输入初始化每个索引。
      顺便说一句,您只需要为输入创建一个 Scanner 对象(不需要为不同的输入创建各种对象)。
      编辑- 没有使用 numbs 数组。(如 cmets 中所述)

      Scanner sc=new Scanner(System.in);
      System.out.println("How many names do you want to enter: ");
      int number = sc.nextInt();
      String []nameArray=new String[number];
      sc.nextLine();  //To read first input as well.
      for (int i = 0; i < number; i++) {   
          System.out.println("What is your name");  
          nameArray[i]=sc.nextLine();
      }
      sc.close();  //To prevent memory leak
      

      【讨论】:

      • 好奇...为什么要使用numbs[] 数组?为什么不只是for (int i = 0; i &lt; number; i++) { 或for (int i = 0; i &lt; nameArray.length; i++) {?然后在遍历数组时:for (int i = 0; i &lt; nameArray.length; i++) { System.out.println(Supplied Name #" + (i + 1) +": " + nameArray[i]); }
      • 这不能正常工作——输入中有一个额外的换行符,导致nameArray 中的第一个条目始终为空白。输入“3”、“first”、“second”,程序终止,如果你在最后加上这个——System.out.println(Arrays.toString(nameArray))——程序显示数组确实包含三个元素,第一个是空白的:@ 987654328@
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2022-06-29
      • 2019-12-02
      • 2017-07-13
      相关资源
      最近更新 更多