0

I have a project for school and I have some problems with the coding part.
I want to have a kind of database in a file from where I get input. The text in the file I want to be added to an ArrayList and after I want to add a new member. After adding the new member I want it to be added to the ArrayList and to be displayed in an output file.

This is the Main:

import java.util.*;
import java.io.*;

public class Main {


    public static List<Member> membersList = new ArrayList<>();

    public static readFile file = new readFile();
    public static writeFile write = new writeFile();

    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        Main call = new Main();
        int choice;
        Scanner in = new Scanner(System.in);
        do {
            System.out.println("\n<<<< CLUB CHAIRMAN >>>>\n");

            System.out.println("1-Display members list");
            System.out.println("2-Modify a member");
            System.out.println("3-Add member");
            System.out.println("0-Exit");
            System.out.println("\n Select: ");
            choice = in.nextInt();
            in.nextLine();
            if(choice == 1)
            {
                file.openFile();
                file.readFile(membersList);
                file.closeFile();
            }
            if(choice == 2)
            {
                write.writer();
            }

            if(choice == 3)
            {
                call.addNewMember();
            }
        }while(choice != 0);
    }
    private void addNewMember() {
        int numberOfMembers;
        Scanner in = new Scanner(System.in);
        System.out.println("How many members do you want to add?");
        numberOfMembers = in.nextInt();
        in.nextLine();
        String[][] newMember = new String[numberOfMembers][4];

        for (int i = 0; i < numberOfMembers; i++)
        {
            System.out.println("\nEnter details for member " + (i + 1) + ":");
            System.out.println("Name:");
            newMember[i][0] = in.nextLine();
            System.out.println("Age:");
            newMember[i][1] = in.nextLine();
            System.out.println("Gender:");
            newMember[i][2] = in.nextLine();
            System.out.println("Experience(elite swimmer/swimming for the exercise:");
            newMember[i][3] = in.nextLine();
            System.out.println("Membership Type(passive/active):");
            newMember[i][4] = in.nextLine();

        }
        for(int i = 0; i < newMember.length; i++)
        {
            membersList.add(new Member( newMember[i][0], Integer.parseInt( newMember[i][1]),  newMember[i][2],  newMember[i][3],newMember[i][4]));
        }
        System.out.println("\nThe action completed successfully");



    }
}


class Member
{

    private String name;
    private int age;
    private String gender;
    private String experience;
    private String membershipType;

    Member(String name, int age, String gender, String experience, String membershipType)
    {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.experience = experience;
        this.membershipType = membershipType;
    }

}

I have this error after fills the sections for the new member: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at Main.addNewMember(Main.java:64) at Main.main(Main.java:40)

Read file class:

   import java.io.*;
import java.util.*;

public class readFile {

    private Scanner x ;

    public void openFile() throws FileNotFoundException {
        try {
            x = new Scanner(new File("D:\\Trial Exam\\USE CASE 1\\src\\members"));
        } catch (Exception e) {
            System.out.println("Couldn't find file");
        }
    }

    public void readFile(List<Member> list) throws FileNotFoundException {
        String fileName = "D:\\Trial Exam\\USE CASE 1\\src\\members";
        String line = null;
        Scanner x = new Scanner(new File(fileName));

        try {

            FileReader fileReader = new FileReader(fileName);

            BufferedReader bufferedReader = new BufferedReader(fileReader);

            while ((line = bufferedReader.readLine()) != null) {

                String a = x.next();
                String b = x.next();
                String c = x.next();
                String d = x.next();
                String e = x.next();
                list.add(new Member(a,Integer.parseInt(b),c,d,e));
                System.out.println(line);
            }

            bufferedReader.close();
        } catch (FileNotFoundException ex) {
            System.out.println(
                    "Unable to open file '" + fileName + "'");
        } catch (IOException ex) {
            System.out.println(
                    "Error reading file '" + fileName + "'");

        }

    }
    public void closeFile() {
        x.close();
    }

}

Write file class:

 import java.io.*;

public class writeFile {
    private static String fileName = "D:\\Trial Exam\\USE CASE 1\\src\\output";

    public void writer() throws IOException {

        Main call = new Main();
        PrintWriter pw = null;
        FileOutputStream fo = null;
        File file = null;
        try {
            file = new File("D:\\Trial Exam\\USE CASE 1\\src\\output");
            pw = new PrintWriter(new FileOutputStream(file));
            fo = new FileOutputStream(file);
            int memberList = call.membersList.size();
            for (int i = 0; i < memberList; i++) {
                pw.write(call.membersList.get(i).toString() + "\n");
            }
        } finally {
            pw.flush();
            pw.close();
            fo.close();
        }
    }
}

And this is the members input file: Member1 27 male junior passive Member2 28 female senior active Member3 32 female senior passive

1
  • Why String[][] newMember? Why not Member[] newMember? Or better yet, forget newMember and just add the new Members right into memberList. Commented Nov 28, 2017 at 12:09

1 Answer 1

1

You define array 4 size, therefore you can access max index 3.

 //Array's second dimension size is 4
 //you can access max index 3
//Example  numberOfMembers[i][3]
 String[][] newMember = new String[numberOfMembers][4];

At this line you access index 4, so you get ArrayIndexOutOfBoundsException.

 for (int i = 0; i < numberOfMembers; i++)
 {
      ....
     //you can access max index  newMember[i][3], not 4
     newMember[i][4] = in.nextLine();

 }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.