Java can';t在一行中声明多于2个数组
我正在做一个计算机科学课程的作业,我试图在一行中声明3个字符串数组,但它一直给我这个错误消息 java.lang.NullPointerException 我把它弄得有点乱,我通过改变它解决了这个问题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.*;
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