java用户定义数组(和用户定义数组大小)返回[null,null,null,…]

java用户定义数组(和用户定义数组大小)返回[null,null,null,…],java,arrays,null,user-defined,Java,Arrays,Null,User Defined,这是我在这个网站上的第一个问题,我在NetBeans 8.0.2上运行它,并试图打印出我的用户定义数组,但它总是返回空值。例如,如果您说有两名员工,并输入他们的姓名,则返回[null,null] 如何修复此错误?我是个新手 import java.util.Scanner; import java.text.DecimalFormat; import java.util.Arrays; class Tips_Calculation2 { public static void main(Str

这是我在这个网站上的第一个问题,我在NetBeans 8.0.2上运行它,并试图打印出我的用户定义数组,但它总是返回空值。例如,如果您说有两名员工,并输入他们的姓名,则返回[null,null]

如何修复此错误?我是个新手

import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Arrays;

class Tips_Calculation2 
{
public static void main(String[] args)
{
    Scanner scan = new Scanner(System.in);

    System.out.print("How many employees for the week?: ");
    int numberOfEmps = scan.nextInt();

    // counter for the if statement that should return all employees from the array
    int counter = numberOfEmps;

    int[] nOEarray = new int[numberOfEmps];


    System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");


    for(int i = 1; i <= numberOfEmps; i++)
    {
        String nameCycler = scan.next();
        String[] namesArray = new String[i];

        if(counter == i)
        {
            System.out.println(Arrays.toString(namesArray));
        }
    }
}
}
import java.util.Scanner;
导入java.text.DecimalFormat;
导入java.util.array;
课堂技巧与计算2
{
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
System.out.print(“一周有多少员工?”:”;
int numberOfEmps=scan.nextInt();
//if语句的计数器,该语句应返回数组中的所有雇员
int计数器=电磁脉冲数;
int[]nOEarray=newint[numberOfEmps];
System.out.println(“\n输入输入金额(“+numberOfEmps+”)之前的工人姓名:”;
对于(inti=1;i“如何修复此错误”不是。这不是错误

 String[] namesArray = new String[i]; // step one, you declare an array of Strings
  // which you don't initialize

        if(counter == i)
        {
            System.out.println(Arrays.toString(namesArray));
//you print all the (non-initialized) elements of namesArray
//since you didn't initialize the elements, it takes the default value, which is null
        }

在尝试打印之前,请先用字符串填充数组元素。

首先,您从未将
nameCycler
放在数组中。其次,在我认为错误的每次迭代中,您都会创建
namesArray

您从未将名称分配给数组,并且在每次迭代中都会定义新的数组:

 String[] namesArray = new String[numberOfEmps];
 for(int i = 1; i <= numberOfEmps; i++)
    {
        String nameCycler = scan.next();
        namesArray [i] = nameCycler ;
        if(counter == i)
        {
            System.out.println(Arrays.toString(namesArray));
        }
    }
String[]namesArray=新字符串[numberOfEmps];

对于(int i=1;i您在循环的每次传递上都创建了一个全新的(充满了
null
)数组
namesArray
,然后从不给它赋值。我想您是在寻找类似的东西。请注意,Java索引是从零开始的,而不是从一开始的

String[] names = new String[numberOfEmps]

for(int i = 0; i < names.length; i++) {
    names[i] = scanner.next();
}

System.out.println(Arrays.toString(names));
String[]name=新字符串[numberOfEmps]
for(int i=0;i
在代码中添加注释以指出更改

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    System.out.print("How many employees for the week?: ");
    int numberOfEmps = scan.nextInt();

    // removed 'nOEarray' and 'counter'

    if (numberOfEmps > 0) {
        System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");

        // initializing 'namesArray' outside for loop.
        String[] namesArray = new String[numberOfEmps];
        for(int i = 0; i < numberOfEmps; i++) { // initialized with 0 and updated condition with '<'
            namesArray[i] = scan.next(); // assigning value to 'i'th position of namesArray
        }
        System.out.println(Arrays.toString(namesArray)); // Printing array outside for loop
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.print(“一周有多少员工?”:”;
int numberOfEmps=scan.nextInt();
//删除了“数组”和“计数器”
如果(numberOfEmps>0){
System.out.println(“\n输入输入金额(“+numberOfEmps+”)之前的工人姓名:”;
//正在为循环外部初始化“namesArray”。
字符串[]名称数组=新字符串[numberOfEmps];
对于(int i=0;i
for(int i = 1; i <= numberOfEmps; i++)
{
    String nameCycler = scan.next();
    String[] namesArray = new String[i];

    if(counter == i)
    {
        System.out.println(Arrays.toString(namesArray));
    }
}

for(int i=1;i首先,您应该在循环外部初始化数组。其次,您忘记了将名称设置为数组值

试试这个:

import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Arrays;

class Tips_Calculation2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("How many employees for the week?: ");
        int numberOfEmps = scan.nextInt();

        int[] nOEarray = new int[numberOfEmps];

        System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");

        String[] namesArray = new String[numberOfEmps];

        for (int i = 0; i < numberOfEmps; i++) {
            namesArray[i] = scan.next();
        }
        System.out.println(Arrays.toString(namesArray));
    }
}
import java.util.Scanner;
导入java.text.DecimalFormat;
导入java.util.array;
课堂技巧与计算2{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.print(“一周有多少员工?”:”;
int numberOfEmps=scan.nextInt();
int[]nOEarray=newint[numberOfEmps];
System.out.println(“\n输入输入金额(“+numberOfEmps+”)之前的工人姓名:”;
字符串[]名称数组=新字符串[numberOfEmps];
for(int i=0;i
counter
作为一个单独的变量有什么意义?只需使用
numberOfEmps
,或者更好的方法是使用
nOEarray.length
。他说“我是新手”,他将来会发现它没用;)保证
索引自动边界感知。
import java.util.Scanner;
import java.text.DecimalFormat;
import java.util.Arrays;

class Tips_Calculation2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("How many employees for the week?: ");
        int numberOfEmps = scan.nextInt();

        int[] nOEarray = new int[numberOfEmps];

        System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):");

        String[] namesArray = new String[numberOfEmps];

        for (int i = 0; i < numberOfEmps; i++) {
            namesArray[i] = scan.next();
        }
        System.out.println(Arrays.toString(namesArray));
    }
}