首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

初学Java,做了一个练习软件。出现了空指针错问,请大家看看,多谢

2012-12-23 
初学Java,做了一个练习软件。出现了空指针错问,请大家看看,谢谢初学Java,做了一个练习软件。出现了空指针错

初学Java,做了一个练习软件。出现了空指针错问,请大家看看,谢谢
初学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);
                }
            }
        }
    }
}


[解决办法]
把错误贴上来
[解决办法]
不要吝啬了,把错误信息贴出来吧
[解决办法]
之所以出错,是因为类test5_1里定义的字符数组未初始化。之所以未初始化,是因为在push方法里定义的数组是方法内的局部变量,不是类的成员变量。
解决的办法是,把
char letter_0[]= new char[len_0]; 


换成:

[解决办法]
jdk 1.7 在命令窗口下运行没有错误,上面是运行结果
[解决办法]
debug看看154行的op对象是不是null
[解决办法]
"我来试试看。我在类里面先声明了这些数组也没用吗?" 
你是声明了,但没有初始化,所以那些数组都是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();
        }


[解决办法]
用3楼的办法,代码:
       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();
        }


[解决办法]
该回复于2012-12-17 11:28:50被管理员删除
[解决办法]
我测试通过了的,您的报什么错? 贴一下看看.
[解决办法]
咳,数组名后面不要再加“[]”了!

一般书上建议定义数组时用这样的方法:
char[] c= new char[10];
这样更清楚的表达,变量c是一个char型数组。
而 char c[] =new char[10]; 也对,但容易犯楼主的错误。

热点排行