java.util.Scanner对象在解析文本文件时抛出NullPointerException

时间:2015-01-26 15:37:18

标签: java arrays exception nullpointerexception java.util.scanner

我为this Google Code Jam question创建了这个JAVA代码。 当我执行代码并选择this text file时,它会抛出NullPointerException。请帮忙。我想这是因为nextLine()将扫描器定位到nextLine并返回当前行的其余部分为空。

    line = ab.nextLine();

如何修复此错误以便它读取下一行文本?提供代码以及您的建议。我会感谢你的余生:))

            /* JEditorPaneFileChooser.java
     * Copyright (c) 2014, HerongYang.com, All Rights Reserved.
     */
    import java.io.*;
    import java.nio.*;
    import java.nio.charset.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.filechooser.*;
    import java.util.Scanner;
    public class JEditorPaneFileChooser implements ActionListener {
        JFrame myFrame = null;
        JEditorPane myPane = null;
        JScrollPane mySPane = null;
        JMenuItem cmdOpen = null;
        JMenuItem cmdSave = null;
        String dirName = "\\herong\\swing\\";
        String fileName = "";

        public static void main(String[] a) {
            (new JEditorPaneFileChooser()).test();
        }

        private void test() {
            myFrame = new JFrame("JEditorPane JFileChooser Test");
            myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            myFrame.setSize(300,400);

            myPane = new JEditorPane();
            myPane.setContentType("text/plain");
            myPane.setText(
                "CLICK ON \'File\' AND SELECT \'Open\'\nTHEN SELECT \'A-large-practice.in\'");
            mySPane = new JScrollPane(myPane);
            myFrame.setContentPane(mySPane);

            JMenuBar myBar = new JMenuBar();
            JMenu myMenu = getFileMenu();
            myBar.add(myMenu); 
            myFrame.setJMenuBar(myBar);

            myFrame.setVisible(true);
        }

        private JMenu getFileMenu() {
            JMenu myMenu = new JMenu("File");
            cmdOpen = new JMenuItem("Open");
            cmdOpen.addActionListener(this);
            myMenu.add(cmdOpen);

            return myMenu;
        }

        public void actionPerformed(ActionEvent e) {
            JFileChooser chooser = new JFileChooser();
            chooser.setCurrentDirectory(new File(dirName));

            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    ".in file", "in");
            chooser.setFileFilter(filter);

            Object cmd = e.getSource();
            try {
                if (cmd == cmdOpen) {
                    int code = chooser.showOpenDialog(myPane);
                    if (code == JFileChooser.APPROVE_OPTION) {
                        File selectedFile = chooser.getSelectedFile();
                        long ag= selectedFile.length();
                        fileName = selectedFile.getName();
                        FileInputStream fis = 
                            new FileInputStream(selectedFile);
                        InputStreamReader in=
                            new InputStreamReader(fis, Charset.forName("UTF-8")); 
                        char[] buffer=new char[(int)ag];
                        int n = in.read(buffer);
                        String text = new String(buffer, 0, n);
                        String ans =bag(text);

                        myPane.setText(ans);
                        in.close();
                    }
                } 
            } catch (Exception f) {
                f.printStackTrace();
            }

        }

        public static String bag(String input){

            Scanner ab=new Scanner(input);
            int case1,lp=0;
            case1 = ab.nextInt();
            int total, k;
            char[][] chari,m=null,n=null;
            int R1[][]=null,B1[][]=null;
            String line="",line1="",ghost="",answ="";
            int axr=0,minr=0,maxr=0,axrb=0,minrb=0,maxrb=0,xr=0,lr=0,nex=0,xrb=0,lrb=0,nexb=0,yr=0,lr1=0,lr2=0,lr3=0,yrb=0,lr1b=0,lr2b=0,lr3b=0,man=0,min=0,
            manb=0,minb=0,rax=0,ray=0,cra=0,raxb=0,rayb=0,crab=0;

            int t,i,j,x,p,q,p1,g,h,y,w,sumit,sum,RX=0,BX=0;
            for (i=1;i<=case1;i++)
            {
                total = ab.nextInt();
                k=ab.nextInt();
                chari=new char[total][total];

                for(x=0;x<total;x++)
                {                             
                    line = ab.nextLine();
                    for (y=0;y<total;y++)
                    { chari[x][y] =line.charAt(y);}        

                }



                for (g=0;g<total;g++)
                {

                    w=0;

                    for(h=total-1;h>=0;h--)
                    {
                        m[g][w]=chari[h][g];
                        w++;
                    }
                }

                for (q=0;q<total;q++)
                {
                    p1=total-1;
                    for (p=total-1;p>=0;p--)
                    {
                        if( (m[p][q]=='R')  ||  (m[p][q]=='B'))
                        {
                            n[p1][q]=m[p][q];
                            p--;}
                    }
                }

                for (sumit=total-1;sumit>=0;sumit--)
                {

                    for (sum=0;sum<total;sum++)
                    {

                        if (n[sumit][sum] == 'R')
                        {
                            R1[RX][0]=sumit;
                            R1[RX][3]=sum;
                            RX++;
                        }

                        else if (n[sumit][sum]=='B')
                        {    B1[BX][0] = sumit;
                            B1[BX][4]= sum;
                            BX++;
                        }
                    }
                }

                axr=R1.length;

                for (minr=0;minr<axr;minr++)

                {
                    xr = R1 [minr][0];

                    for (maxr=minr+1;maxr<axr;maxr++)

                    {

                        if (R1 [maxr][0] == xr)
                            lr++;}

                    if (lr>=k) nex=1;
                    if (lr<=k) break;
                    else lr=0;
                }

                if (nex!=1)
                {
                    for (minr=0;minr<axr;minr++)
                    {

                        yr=R1[minr][5];

                        for (maxr=minr+1;maxr<axr;maxr++)
                        {
                            if (R1[maxr][6]==yr)
                                lr1++;}

                        if (lr1>=k)nex=1;
                        if (lr1>=k) break;
                        else lr1=0;
                    }

                    if (nex!=1)
                    {

                        for (man=0;man<axr;man++)

                        {

                            rax=R1[man][0];
                            ray = R1 [man][7];
                            cra=1;
                            for (min=man+1;min<axr;min++)

                            {

                                if (    (R1[min][0]==rax-cra)   &&   (R1[min][8] == ray +cra)    )

                                {lr2++;
                                    cra++;}

                                else break;

                            }
                            cra=1;
                            if (lr2>=k) nex=1;
                            if (lr2>=k) break;
                            else lr2=0;
                        }

                        if (nex!=1)
                        {
                            for (man=0;man<axr;man++)

                            {

                                rax=R1[man][0];
                                ray = R1 [man][9];
                                cra=1;
                                for (min=man+1;min<axr;min++)

                                {

                                    if (    (R1[min][0]==rax-cra)   &&   (R1[min][10] == ray -cra)    )

                                    {lr3++;
                                        cra++;}

                                    else break;

                                }
                                cra=1;
                                if (lr3>=k) nex=1;
                                if (lr3>=k) break;
                                else lr3=0;
                            }
                        }
                    }
                }

                axrb=B1.length;
                for (minrb=0;minrb<axrb;minrb++)
                {
                    xrb = B1 [minrb][0];

                    for (maxrb=minrb+1;maxrb<axrb;maxrb++)

                    {

                        if (B1 [maxrb][0] == xrb)
                            lr++;}

                    if (lrb>=k) nexb=1;
                    if (lrb<=k) break;
                    else lr=0;
                }

                if (nexb!=1)
                {
                    for (minrb=0;minrb<axrb;minrb++)
                    {

                        yr=B1[minrb][11];

                        for (maxrb=minrb+1;maxrb<axrb;maxrb++)
                        {
                            if (B1[maxrb][12]==yrb)
                                lr1b++;}

                        if (lr1b>=k)nexb=1;
                        if (lr1b>=k) break;
                        else lr1b=0;
                    }

                    if (nexb!=1)
                    {

                        for (manb=0;manb<axrb;manb++)

                        {

                            raxb=B1[manb][0];
                            rayb = B1 [manb][13];
                            crab=1;
                            for (minb=manb+1;minb<axrb;minb++)

                            {

                                if (    (B1[minb][0]==raxb-crab)   &&   (B1[minb][14] == rayb +crab)    )

                                {lr2b++;
                                    crab++;}

                                else break;

                            }
                            crab=1;
                            if (lr2b>=k) nexb=1;
                            if (lr2b>=k) break;
                            else lr2b=0;
                        }

                        if (nexb!=1)
                        {
                            for (manb=0;manb<axrb;manb++)

                            {

                                raxb=B1[manb][0];
                                rayb = B1 [manb][15];
                                crab=1;
                                for (minb=manb+1;minb<axrb;minb++)

                                {

                                    if (    (B1[minb][0]==raxb-crab)   &&   (B1[minb][16] == rayb -crab)    )

                                    {lr3b++;
                                        crab++;}

                                    else break;

                                }
                                crab=1;
                                if (lr3b>=k) nexb=1;
                                if (lr3b>=k) break;
                                else lr3b=0;
                            }
                        }
                    }
                }

                if (nex==1)
                {ghost=(nexb==1)?"Both": "Red";}
                else
                {ghost =(nexb==1)? "Blue":"Neither";}

                answ= "case1 #" + i+ ": " +ghost+"\n";

            }


            return answ;
        }

    }

stacktrace -

java.lang.NullPointerException
at JEditorPaneFileChooser.bag(JEditorPaneFileChooser.java:112)
at JEditorPaneFileChooser.actionPerformed(JEditorPaneFileChooser.java:78)

1 个答案:

答案 0 :(得分:1)

NullPointerException不在

 line = ab.nextLine()

它在

 chari[x][y] =line.charAt(y);

原因是,chari为空。