Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   Java (http://www.programmingforums.org/forum17.html)
-   -   Trouble inputing data to an Array (http://www.programmingforums.org/showthread.php?t=12078)

Jarod Silverstar Dec 1st, 2006 8:50 PM

Trouble inputing data to an Array
 
Hello all.
New programming novice here that has run into a weird issue.

Trying to create a program to input student data from a text file into an array, but getting an error when I run it. I am probably doing something wrong in a very simple way, but just not getting it.

I can run the sample program one of two ways, as input into a single class, or into an array. It works and returns the data correctly as a single class, but when I try to do the array part, it compiles okay, but throws an error on running: NullPointerException

:

import java.io.*;
import javax.swing.*;

public class GradeReader
{
        final int NUM_PERSON = 4;
        Grades[] data = new Grades[NUM_PERSON];
        // Grades data = new Grades();
       
        String firstName, lastName, classNum, grade;
       
        public static void main(String[] args) throws IOException
        {
                new GradeReader();
        }               
       
        public GradeReader() throws IOException 
        {
                getFile();               
                JOptionPane.showMessageDialog(null, "Reading data from File. Please hit 'OK' to continue.");       
                showResults();       
        }       
       
        private void getFile() throws IOException
        {
                String filename = "Grades.txt";
                FileReader freader = new FileReader(filename);
                BufferedReader inputFile = new BufferedReader(freader);

                for (int index = 0; index<3; index++)
                        {
                                firstName = inputFile.readLine();
                                lastName = inputFile.readLine();
                                classNum = inputFile.readLine();
                                grade = inputFile.readLine();
                               
                                data[index].setGrades(firstName, lastName, classNum, grade);
                                // data.setGrades(firstName, lastName, classNum, grade);
                               
                        }
                inputFile.close();
        }
       
        private void showResults()
                {
                        JTextArea outArea;
                        JScrollPane scroller;
                        outArea = new JTextArea(30,35);
                        outArea.setText(data.toString());
                        scroller = new JScrollPane(outArea);
                        JOptionPane.showMessageDialog(null,scroller);
                        System.exit(0);
                }       

}


Let me know if you want to see any of the other code, or the txt list that the input is coming from.

titaniumdecoy Dec 1st, 2006 9:58 PM

:

Grades[] data = new Grades[NUM_PERSON];
This code creates an array capable of storing NUM_PERSON Grades objects. By default, each index is initialized to null.

:

data[index].setGrades(firstName, lastName, classNum, grade);
You are attempting to call the method setGrades on null, hence the NullPointerException.

One solution is to initialize each index of data to a new instance of Grades in the GradeReader class' constructor, which will be called when a new instance of GradeReader is created:
:

public class GradeReader {

      public GradeReader() {
            for (int i = 0; i < NUM_PERSON; i++)
                  data[i] = new Grades();
      }

...


Jarod Silverstar Dec 2nd, 2006 3:23 AM

Okay, that got me past the NullPointer error. But I am not getting my output now.

Here is the output from my Grades class:
:

       
public String toString()
                {
                        String studentStr = "Student name: " + getFirstName()
                        + " " + getLastName()
                        + "\nClass: " + getClassNum()
                        + "\nGrade: " + getGrade();
                       
                        return studentStr;
                }


And here is where I am trying to call it:

:

private void showResults()
                {
                        JTextArea outArea;
                        JScrollPane scroller;
                        outArea = new JTextArea(30,35);
                        outArea.setText(data.toString());
                        scroller = new JScrollPane(outArea);
                        JOptionPane.showMessageDialog(null,scroller);
                        System.exit(0);
                }


Again, I got the output doing a single object, but now that I do have mutliple objects in the array, I get junk returned.

I assume I need to do something with this line:
outArea.setText(data.toString());
But so far I have not been able to come up with the right option.

Thank you.

Jarod Silverstar Dec 2nd, 2006 4:01 AM

Well, I partly figured it out.

When I do this:
:

outArea.setText(data[0].toString() + data[1].toString());

I get my output. But it seems to be that there must be a much better way of doing this.

titaniumdecoy Dec 2nd, 2006 2:19 PM

If you want to print every item in the list, use a loop. Consider cocatenating each item into a temporary String variable, or using JTextArea's append method.


All times are GMT -5. The time now is 12:35 PM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC