【问题标题】:Printing an Array's components but it prints null + the value at the specified index (JAVA)打印数组的组件,但它打印 null + 指定索引处的值(JAVA)
【发布时间】:2021-01-08 23:20:50
【问题描述】:
import java.util.Scanner;
import java.util.Arrays;

class Main
{
    public static void main(String[] args)
    {
        Scanner amount = new Scanner(System.in);
        System.out.print("How many names would you like to enter?: ");
        int total = amount.nextInt();
        String[] mainArray = new String[total];
        for (int i=0; i<total; i++){
        Scanner names = new Scanner(System.in);
        System.out.print("Gimme a name!: ");
        String name = names.nextLine();
          mainArray[i]=mainArray[i]+name.charAt(0);
        }
        System.out.println(Arrays.toString(mainArray)+"");
    }
}

输入:3 输入:萌 输入:卷曲 输入:维达

返回

How many names would you like to enter?: 3
Gimme a name!: Moe 
Gimme a name!: Curly
Gimme a name!: Vader
[nullM, nullC, nullV]

代码应该返回“MCV”,没有空格。我不知道为什么它在打印指定字符之后会预先打印 Null,它应该在填充数组后打印,或者至少我认为应该打印。

【问题讨论】:

  • mainArray[i]=mainArray[i]+name.charAt(0); 您认为此时mainArray[i] 中存储的值是多少?
  • 或者更好的问题是你开始时 mainArray[i] 中的内容是什么?
  • 一个小提示:您不必创建新的扫描仪来读取不同的输入。您可以使用数量来读取名称。您还应该在使用“amount.close() 和 names.close()”阅读扫描仪后关闭扫描仪
  • mainArray[i]=mainArray[i]+name.charAt(0); 与您的代码中的 mainArray[i]=null+name.charAt(0); 相同。你真的认为这是你想要做的吗?
  • 在程序结束前不要关闭任何使用 System.in 的扫描程序。一旦你关闭了这样一个扫描器,它就会关闭 System.in,祝你好运重新打开它。

标签: java arrays java.util.scanner


【解决方案1】:

您可以使用 StringBuilderStringStringBuffer 等类型的变量来附加所需的值。目前,您正在将值附加到已初始化为 null 的数组元素中。此外,您不需要Scanner 的多个实例(并且永远不会循环)。

演示:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("How many names would you like to enter?: ");
        int total = Integer.parseInt(scanner.nextLine());
        String[] mainArray = new String[total];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < total; i++) {
            System.out.print("Gimme a name!: ");
            mainArray[i] = scanner.nextLine();
            if (mainArray[i].length() >= 1) {
                sb.append(mainArray[i].charAt(0));
            }
        }
        System.out.println(Arrays.toString(mainArray));
        System.out.println(sb);
    }
}

示例运行:

How many names would you like to enter?: 3
Gimme a name!: Moe
Gimme a name!: Vader
Gimme a name!: Curly
[Moe, Vader, Curly]
MVC

请注意,我使用了Integer.parseInt(scanner.nextLine()) 而不是scanner.nextInt(),以便在整数输入之后输入的换行符不会留给下一次扫描使用。查看this discussion 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2014-09-23
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多