Java can';t在一行中声明多于2个数组

Java can';t在一行中声明多于2个数组,java,arrays,runtime-error,Java,Arrays,Runtime Error,我正在做一个计算机科学课程的作业,我试图在一行中声明3个字符串数组,但它一直给我这个错误消息 java.lang.NullPointerException 我把它弄得有点乱,我通过改变它解决了这个问题 public static String[] offence,name,date = new String[8]; 到 为什么只有在我这样做的时候它才起作用 顺便说一句,我是新来的,所以对我放松点 package pDatabaseApp; import java.io.*;

我正在做一个计算机科学课程的作业,我试图在一行中声明3个字符串数组,但它一直给我这个错误消息

java.lang.NullPointerException

我把它弄得有点乱,我通过改变它解决了这个问题

public static String[] offence,name,date = new String[8];

为什么只有在我这样做的时候它才起作用

顺便说一句,我是新来的,所以对我放松点

    package pDatabaseApp;

    import java.io.*;

    public class PDatabaseMenu {

    public static String[] offence,name = new String[8];
    public static String[] date = new String[8];

    public static void main(String[] args) throws IOException {

        String line;

        BufferedReader in;
        in = new BufferedReader(new InputStreamReader(System.in));

        boolean finnish = false, reenter = false;

        while(finnish == false) {

            int i;

            for(i = 0; i <= 7; i++) {

                System.out.println("enter a name");

                name[i] = in.readLine();

                System.out.println("enter a day");

                String day = in.readLine();

                System.out.println("enter a month");

                String month = in.readLine();

                System.out.println("enter a year");

                String year = in.readLine();

                date[i] = day + "/" + month + "/" + year;

                String offenceEnter[] = new String[3];
                String offenceType[] = {"Assault","Arson","Theft"};

                int l;
                for(l = 0; l <= 2; l++) {

                    System.out.println("is there offence " + offenceType[l]);
                    offenceEnter[l] = in.readLine();

                    if(offenceEnter[l] == "yes") {

                        offence[i] = offenceType[l];

                    }
                }

            }

        }

        in.close();
    }
}
包pDatabaseApp;
导入java.io.*;
公共类PDatabaseMenu{
公共静态字符串[],名称=新字符串[8];
公共静态字符串[]日期=新字符串[8];
公共静态void main(字符串[]args)引发IOException{
弦线;
缓冲读取器;
in=新的BufferedReader(新的InputStreamReader(System.in));
布尔芬兰语=false,重新输入=false;
while(芬兰语==假){
int i;

对于(i=0;i,在冒犯和姓名之间使用逗号,如下所示

public static String[] offence,name = new String[8];
是以下各项的快捷方式:

public static String[] offence;
public static String[] name = new String[8];
这个问题非常密切相关:
在冒犯和姓名之间使用逗号,就像这样

public static String[] offence,name = new String[8];
是以下各项的快捷方式:

public static String[] offence;
public static String[] name = new String[8];
这个问题非常密切相关:

按照上面编写代码的方式,数组将以null结尾。如果要初始化所有三个变量,则应使用此选项

public static String[] offence = new String[8],name = new String[8],date = new String[8];

按照上面编写代码的方式,数组的值最终为null

public static String[] offence = new String[8],name = new String[8],date = new String[8];
记住密码

public static String[] offence,name,date = new String[8];
将只初始化日期。因此,其他变量保持未初始化状态。因此,您得到了
java.lang.NullPointerException

你需要像这样的东西

 public static String[] offence= new String[8],name= new String[8],date = new String[8];
记住密码

public static String[] offence,name,date = new String[8];
将只初始化日期。因此,其他变量保持未初始化状态。因此,您得到了
java.lang.NullPointerException

你需要像这样的东西

 public static String[] offence= new String[8],name= new String[8],date = new String[8];
上面的代码意味着您将尝试声明和初始化一个大小为8的字符串数组,其中包含三个指向它的指针:offence、name和date。对于可变对象(如数组),单独初始化每个对象通常更有意义

话虽如此,我不知道你修改后的代码为什么有效,但我认为它不会按照你希望的方式运行。我建议你做以下几点:

public static String[] offence, name, date;
offence = new String[8];
name = new String[8];
date = new String[8];
希望我能帮上忙

package pDatabaseApp;

import java.io.*;

public class PDatabaseMenu {

public static String[] offence = new String[8];
public static String[] name = new String[8];
public static String[] date = new String[8];

public static void main(String[] args) throws IOException {

    String line;

    BufferedReader in;
    in = new BufferedReader(new InputStreamReader(System.in));

    boolean finnish = false, reenter = false;

    while(finnish == false) {

        int i;

        for(i = 0; i < 8; i++) {

            System.out.println("enter a name");

            name[i] = in.readLine();

            System.out.println("enter a day");

            String day = in.readLine();

            System.out.println("enter a month");

            String month = in.readLine();

            System.out.println("enter a year");

            String year = in.readLine();

            date[i] = day + "/" + month + "/" + year;

            String offenceEnter[] = new String[3];
            String offenceType[] = {"Assault","Arson","Theft"};

            int l;
            for(l = 0; l < 3; l++) {

                System.out.println("is there offence " + offenceType[l]);
                offenceEnter[l] = in.readLine();

                if(offenceEnter[l].Equals("yes"))//A for each is better but idk if you did that
上面的代码意味着您将尝试声明和初始化一个大小为8的字符串数组,其中包含三个指向它的指针:offence、name和date。对于可变对象(如数组),单独初始化每个对象通常更有意义

话虽如此,我不知道你修改后的代码为什么有效,但我认为它不会按照你希望的方式运行。我建议你做以下几点:

public static String[] offence, name, date;
offence = new String[8];
name = new String[8];
date = new String[8];

希望我能帮上忙!

`=new String[8]`只适用于紧靠它前面的变量,而不是该行上声明的所有变量。因此,其他变量仍然未初始化。另外,不要将字符串与==。`=new String[8]进行比较`仅适用于紧靠它前面的变量,而不是该行上声明的所有变量。因此,其他变量仍处于未初始化状态。另外,不要将字符串与==进行比较。
package pDatabaseApp;

import java.io.*;

public class PDatabaseMenu {

public static String[] offence = new String[8];
public static String[] name = new String[8];
public static String[] date = new String[8];

public static void main(String[] args) throws IOException {

    String line;

    BufferedReader in;
    in = new BufferedReader(new InputStreamReader(System.in));

    boolean finnish = false, reenter = false;

    while(finnish == false) {

        int i;

        for(i = 0; i < 8; i++) {

            System.out.println("enter a name");

            name[i] = in.readLine();

            System.out.println("enter a day");

            String day = in.readLine();

            System.out.println("enter a month");

            String month = in.readLine();

            System.out.println("enter a year");

            String year = in.readLine();

            date[i] = day + "/" + month + "/" + year;

            String offenceEnter[] = new String[3];
            String offenceType[] = {"Assault","Arson","Theft"};

            int l;
            for(l = 0; l < 3; l++) {

                System.out.println("is there offence " + offenceType[l]);
                offenceEnter[l] = in.readLine();

                if(offenceEnter[l].Equals("yes"))//A for each is better but idk if you did that