初学Java,做了一个练习软件。出现了空指针错问,请大家看看,谢谢。原来想实现的是输入英语单词后,再根据编码选择性导出,但是导出的时候出现空指针错误。
本人高中,刚刚开始学,做的比较繁琐。请大家多多指教。import java.util.Scanner;
class test5_1{
String word;
char j;
int l;
int i;
int k=0;
char letter_0[];
char letter_1[];
char letter_2[];
char letter_3[];
char letter_4[];
char letter_5[];
char letter_6[];
int len_0;
int len_1;
int len_2;
int len_3;
int len_4;
int len_5;
int len_6;
void back(){
test5 op= new test5();
}
void push(String word, int l, int i){
this.word=word;
this.l=l;
this.i=i;
switch(i){
case 0:
len_0=l;
char letter_0[]= new char[len_0];
for(;l>0;l--,k++){
letter_0[k]=word.charAt(k);
}
back();
case 1:
len_1=l;
char letter_1[]= new char[len_1];
for(k=0;len_1>0;len_1--,k++){
letter_1[k]=word.charAt(k);
}
back();
case 2:
len_2=l;
char letter_2[]= new char[len_2];
for(k=0;len_2>0;len_2--,k++){
letter_2[k]=word.charAt(k);
}
back();
case 3:
len_3=l;
char letter_3[]= new char[len_3];
for(k=0;len_3>0;len_3--,k++){
letter_3[k]=word.charAt(k);
}
back();
case 4:
len_4=l;
char letter_4[]= new char[len_4];
for(k=0;len_4>0;len_4--,k++){
letter_4[k]=word.charAt(k);
}
back();
case 5:
len_5=l;
char letter_5[]= new char[len_5];
for(k=0;len_5>0;len_5--,k++){
letter_5[k]=word.charAt(k);
}
back();
case 6:
len_6=l;
char letter_6[]= new char[len_6];
for(k=0;len_6>0;len_6--,k++){
letter_6[k]=word.charAt(k);
}
back();
}
}
void get(char num){
this.j=num;
switch(j){
case '0':
for(k=0;len_0>0;len_0--,k++){
System.out.println(letter_0[k]);
}
back();
case '1':
for(k=0;len_1>0;len_1--,k++){
System.out.println(letter_1[k]);
}
back();
case '2':
for(int k=0;len_2>0;len_2--,k++){
System.out.println(letter_2[k]);
}
case '3':
for(int k=0;len_3>0;len_3--,k++){
System.out.println(letter_3[k]);
}
back();
case '4':
for(int k=0;len_4>0;len_4--,k++){
System.out.println(letter_4[k]);
}
back();
case '5':
for(int k=0;len_5>0;len_5--,k++){
System.out.println(letter_5[k]);
}
back();
case '6':
for(int k=0;len_6>0;len_6--,k++){
System.out.println(letter_6[k]);
}
back();
}
}
}class test5{
public static void main(String args[])
throws java.io.IOException{
String word;
char num;
int i;
test5_1 op= new test5_1();
for(i=0;i<7;i++){
if(i==6){
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
int l=word.length();
op.push(word,l,i);
System.out.println("堆栈已满,键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
}else{
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
if(word.equals("777")){
System.out.println("键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
i-=1;
}else{
int l=word.length();
op.push(word,l,i);
}
}
}
}
}
本人高中,刚刚开始学,做的比较繁琐。请大家多多指教。import java.util.Scanner;
class test5_1{
String word;
char j;
int l;
int i;
int k=0;
char letter_0[];
char letter_1[];
char letter_2[];
char letter_3[];
char letter_4[];
char letter_5[];
char letter_6[];
int len_0;
int len_1;
int len_2;
int len_3;
int len_4;
int len_5;
int len_6;
void back(){
test5 op= new test5();
}
void push(String word, int l, int i){
this.word=word;
this.l=l;
this.i=i;
switch(i){
case 0:
len_0=l;
char letter_0[]= new char[len_0];
for(;l>0;l--,k++){
letter_0[k]=word.charAt(k);
}
back();
case 1:
len_1=l;
char letter_1[]= new char[len_1];
for(k=0;len_1>0;len_1--,k++){
letter_1[k]=word.charAt(k);
}
back();
case 2:
len_2=l;
char letter_2[]= new char[len_2];
for(k=0;len_2>0;len_2--,k++){
letter_2[k]=word.charAt(k);
}
back();
case 3:
len_3=l;
char letter_3[]= new char[len_3];
for(k=0;len_3>0;len_3--,k++){
letter_3[k]=word.charAt(k);
}
back();
case 4:
len_4=l;
char letter_4[]= new char[len_4];
for(k=0;len_4>0;len_4--,k++){
letter_4[k]=word.charAt(k);
}
back();
case 5:
len_5=l;
char letter_5[]= new char[len_5];
for(k=0;len_5>0;len_5--,k++){
letter_5[k]=word.charAt(k);
}
back();
case 6:
len_6=l;
char letter_6[]= new char[len_6];
for(k=0;len_6>0;len_6--,k++){
letter_6[k]=word.charAt(k);
}
back();
}
}
void get(char num){
this.j=num;
switch(j){
case '0':
for(k=0;len_0>0;len_0--,k++){
System.out.println(letter_0[k]);
}
back();
case '1':
for(k=0;len_1>0;len_1--,k++){
System.out.println(letter_1[k]);
}
back();
case '2':
for(int k=0;len_2>0;len_2--,k++){
System.out.println(letter_2[k]);
}
case '3':
for(int k=0;len_3>0;len_3--,k++){
System.out.println(letter_3[k]);
}
back();
case '4':
for(int k=0;len_4>0;len_4--,k++){
System.out.println(letter_4[k]);
}
back();
case '5':
for(int k=0;len_5>0;len_5--,k++){
System.out.println(letter_5[k]);
}
back();
case '6':
for(int k=0;len_6>0;len_6--,k++){
System.out.println(letter_6[k]);
}
back();
}
}
}class test5{
public static void main(String args[])
throws java.io.IOException{
String word;
char num;
int i;
test5_1 op= new test5_1();
for(i=0;i<7;i++){
if(i==6){
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
int l=word.length();
op.push(word,l,i);
System.out.println("堆栈已满,键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
}else{
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
if(word.equals("777")){
System.out.println("键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
i-=1;
}else{
int l=word.length();
op.push(word,l,i);
}
}
}
}
}
解决的办法是,把
char letter_0[]= new char[len_0];
换成:
letter_0= new char[len_0];
其他的case里都这样换。
这么写是有语法错误的。。
==
你是声明了,但没有初始化,所以那些数组都是null. 你在方法里本应初始化,赋值,但你又重新定义了和这些数组名一样的数组,它们仅是在方法里可见。和类里定义的没有关系了。
象我说的那样可以的,我调试过了。
还可以,把局部变量,赋给成员变量。 switch(i){
case 0:
len_0=l;
char letter_0[]= new char[len_0];
for(;l>0;l--,k++){
letter_0[k]=word.charAt(k);
}
//--
this.letter_0=letter_0;
back();
case 1:
len_1=l;
char letter_1[]= new char[len_1];
for(k=0;len_1>0;len_1--,k++){
letter_1[k]=word.charAt(k);
}
//--
this.letter_1=letter_1; back();
case 2:
len_2=l;
char letter_2[]= new char[len_2];
for(k=0;len_2>0;len_2--,k++){
letter_2[k]=word.charAt(k);
}
//--
this.letter_2=letter_2; back();
case 3:
len_3=l;
char letter_3[]= new char[len_3];
for(k=0;len_3>0;len_3--,k++){
letter_3[k]=word.charAt(k);
}
//--
this.letter_3=letter_3; back();
case 4:
len_4=l;
char letter_4[]= new char[len_4];
for(k=0;len_4>0;len_4--,k++){
letter_4[k]=word.charAt(k);
}
//--
this.letter_4=letter_4; back();
case 5:
len_5=l;
char letter_5[]= new char[len_5];
for(k=0;len_5>0;len_5--,k++){
letter_5[k]=word.charAt(k);
}
//--
this.letter_5=letter_5; back();
case 6:
len_6=l;
char letter_6[]= new char[len_6];
for(k=0;len_6>0;len_6--,k++){
letter_6[k]=word.charAt(k);
}
//--
this.letter_6=letter_6; back();
}
switch(i){
case 0:
len_0=l;
letter_0= new char[len_0];//这里修改。不再定义数组,而是初始化成员数组。下同。
for(;l>0;l--,k++){
letter_0[k]=word.charAt(k);
}
back();
case 1:
len_1=l;
letter_1= new char[len_1];
for(k=0;len_1>0;len_1--,k++){
letter_1[k]=word.charAt(k);
}
back();
case 2:
len_2=l;
letter_2= new char[len_2];
for(k=0;len_2>0;len_2--,k++){
letter_2[k]=word.charAt(k);
}
back();
case 3:
len_3=l;
letter_3= new char[len_3];
for(k=0;len_3>0;len_3--,k++){
letter_3[k]=word.charAt(k);
}
back();
case 4:
len_4=l;
letter_4= new char[len_4];
for(k=0;len_4>0;len_4--,k++){
letter_4[k]=word.charAt(k);
}
back();
case 5:
len_5=l;
letter_5= new char[len_5];
for(k=0;len_5>0;len_5--,k++){
letter_5[k]=word.charAt(k);
}
back();
case 6:
len_6=l;
letter_6= new char[len_6];
for(k=0;len_6>0;len_6--,k++){
letter_6[k]=word.charAt(k);
}
back();
}
我用了你十楼方法,有效果,感谢!
但是三楼方法里“ letter_4= new char[len_4]; ”这种初始化的语句有报语法错误。
请看一下。
class test5_1{
String word;
char j;
int l;
int i;
int k=0;
char letter_0[];
char letter_1[];
char letter_2[];
char letter_3[];
char letter_4[];
char letter_5[];
char letter_6[];
int len_0;
int len_1;
int len_2;
int len_3;
int len_4;
int len_5;
int len_6;
void back(){
test5 op= new test5();
}
void push(String word, int l, int i){
this.word=word;
this.l=l;
this.i=i;
switch(i){
case 0:
len_0=l;
letter_0[]= new char[len_0];
for(;l>0;l--,k++){
letter_0[k]=word.charAt(k);
}
back();
case 1:
len_1=l;
letter_1[]= new char[len_1];
for(k=0;len_1>0;len_1--,k++){
letter_1[k]=word.charAt(k);
}
back();
case 2:
len_2=l;
letter_2[]= new char[len_2];
for(k=0;len_2>0;len_2--,k++){
letter_2[k]=word.charAt(k);
}
back();
case 3:
len_3=l;
letter_3[]=new char[len_3];
for(k=0;len_3>0;len_3--,k++){
letter_3[k]=word.charAt(k);
}
back();
case 4:
len_4=l;
letter_4[]=new char[len_4];
for(k=0;len_4>0;len_4--,k++){
letter_4[k]=word.charAt(k);
}
back();
case 5:
len_5=l;
letter_5[]=new char[len_5];
for(k=0;len_5>0;len_5--,k++){
letter_5[k]=word.charAt(k);
}
back();
case 6:
len_6=l;
letter_6[]=new char[len_6];
for(k=0;len_6>0;len_6--,k++){
letter_6[k]=word.charAt(k);
}
back();
}
}
void get(char num){
this.j=num;
switch(j){
case '0':
for(k=0;len_0>0;len_0--,k++){
System.out.println(letter_0[k]);
}
back();
case '1':
for(k=0;len_1>0;len_1--,k++){
System.out.println(letter_1[k]);
}
back();
case '2':
for(int k=0;len_2>0;len_2--,k++){
System.out.println(letter_2[k]);
}
case '3':
for(int k=0;len_3>0;len_3--,k++){
System.out.println(letter_3[k]);
}
back();
case '4':
for(int k=0;len_4>0;len_4--,k++){
System.out.println(letter_4[k]);
}
back();
case '5':
for(int k=0;len_5>0;len_5--,k++){
System.out.println(letter_5[k]);
}
back();
case '6':
for(int k=0;len_6>0;len_6--,k++){
System.out.println(letter_6[k]);
}
back();
}
}
}class test5{
public static void main(String args[])
throws java.io.IOException{
String word;
char num;
int i;
test5_1 op= new test5_1();
for(i=0;i<7;i++){
if(i==6){
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
int l=word.length();
op.push(word,l,i);
System.out.println("堆栈已满,键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
}else{
System.out.println("欢迎来到英文单词竖式转化堆栈");
System.out.println("键入英文单词 编号为"+i+" 提取竖式单词请键入777");
Scanner sca=new Scanner(System.in);
word=sca.next();
if(word.equals("777")){
System.out.println("键入要提取单词的编号");
num=(char)System.in.read();
op.get(num);
i-=1;
}else{
int l=word.length();
op.push(word,l,i);
}
}
}
}
}
char[] c= new char[10];
这样更清楚的表达,变量c是一个char型数组。
而 char c[] =new char[10]; 也对,但容易犯楼主的错误。