打印数组的组件,但它打印 null + 指定索引处的值 (JAVA)

Printing an Array's components but it prints null + the value at the specified index (JAVA)

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 输入:萌 输入:卷曲 输入:维德

Returns

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

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

您可以使用 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 以了解更多信息。