Skip to Main Content

New to Java

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

array in object overwrite problem

843789Apr 11 2010 — edited Apr 13 2010
Hi
hope you can help me with this as i've already been using too much time solving it myself :)

I got a Board class which have an ArrayList<ArrayList<Integer>> as attribute. The Board class is controlled from my service class. I need to create a lot of boards which all needs different ArrayList<ArrayList<Integer>> input, so i made a for loop which creates the Boards. The problem is however when i change the variable i used to create the object the values also change inside the object even though the create method have already been called. English isn't my native language so it's a bit hard to explain :) Please ask if there's something you don't understand.
thanks in advance!

I made a temporary solution by making a 3d arraylist so i won't have to overwrite any values but thats not rly a good solution as it's starting to give me problems elsewhere.

the method that creates the boards is Service.importCSV()

model.Board
package model;

import java.util.ArrayList;

public class Board {
	private String controleNumber;
	private ArrayList<ArrayList<Integer>> numbers = new ArrayList<ArrayList<Integer>>();
	private ArrayList<ArrayList<Integer>> remainingNumbers = new ArrayList<ArrayList<Integer>>();
	
	
	public Board(String controlenumber, ArrayList<ArrayList<Integer>> numbers) {
		this.controleNumber = controlenumber;
		this.numbers = numbers;
		this.remainingNumbers = numbers;
	}

	public String getControlenumber() {
		return controleNumber;
	}

	public void setControlenumber(String controleNumber) {
		this.controleNumber = controleNumber;
	}

	public ArrayList<ArrayList<Integer>> getNumbers() {
		return numbers;
	}

	public void setNumbers(ArrayList<ArrayList<Integer>> numbers) {
		this.numbers = numbers;
	}

	public void setRemainingNumbers(ArrayList<ArrayList<Integer>> remainingNumbers) {
		this.remainingNumbers = remainingNumbers;
	}

	public ArrayList<ArrayList<Integer>> getRemainingNumbers() {
		return remainingNumbers;
	}
	
	public String toString() {
		return String.valueOf(controleNumber);
	}
}
service.Service
package service;

import gui.MainFrame;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import ramdao.BoardDao;
import model.Board;

public class Service {

	private static ArrayList<Integer> numbers = new ArrayList<Integer>();

	public static List<Board> getAllBoards() {
		return BoardDao.getAllBoards();
	}

	public static Board createBoard(String controleNumber, ArrayList<ArrayList<Integer>> numbers) {
		Board board = new Board(controleNumber, numbers);
		BoardDao.store(board);
		return board;
	}

	public static void deleteBoard(Board board) {
		BoardDao.remove(board);
	}

	public static Board checkFor(int checkFor) {
		for(Board board : getAllBoards()) {
			System.out.println(board.getRemainingNumbers());
			for(ArrayList<Integer> row : board.getRemainingNumbers()) {
				for(int i=0;i<row.size();i++) {
					if(numbers.contains(row.get(i))) {
						row.remove(row.get(i));
					}
				}
			}
			if(checkFor==1) {
				for(ArrayList<Integer> row : board.getRemainingNumbers()) {
					if(row.size()==0) {
						return board;
					}
				}
			}
			else if(checkFor==2) {
				if(board.getRemainingNumbers().get(0).size()==0 && board.getRemainingNumbers().get(1).size()==0) {
					return board;
				}
				else if(board.getRemainingNumbers().get(0).size()==0 && board.getRemainingNumbers().get(2).size()==0) {
					return board;
				}
				else if(board.getRemainingNumbers().get(1).size()==0 && board.getRemainingNumbers().get(2).size()==0) {
					return board;
				}
			}
			else if(checkFor==3) {
				if(board.getRemainingNumbers().size()==0) {
					return board;
				}
			}
			System.out.println(board.getRemainingNumbers()  );
		}
		return null;
	}

	public static ArrayList<Integer> oneToGo(int rows, ArrayList<Integer> numbers) {
		//TO-DO

		return null;
	}

	public static void importCSV(ArrayList<String> buff) {
		ArrayList<ArrayList<ArrayList<Integer>>> allNumbers = new ArrayList<ArrayList<ArrayList<Integer>>>();
		int line = 0;
		String controleNumber = "";
		String[] splitLine = new String[10];
		for(int i=0;i<buff.size();i++) {
			//adds the split buff to splitLine
			for(int q=0;q<buff.get(i).split(";").length;q++) {
				if(buff.get(i).split(";")[q].equals(""))
					splitLine[q]="0";
				else
					splitLine[q]=buff.get(i).split(";")[q];
			}
			if(line==0) {
				allNumbers.add(new ArrayList<ArrayList<Integer>>());
				ArrayList<Integer> row = new ArrayList<Integer>();
				allNumbers.get(allNumbers.size()-1).add(row);
				
				controleNumber=buff.get(i).split(";")[0];
				for(int q=buff.get(i).split(";").length;q<10;q++) {
					splitLine[q]="0";
				}
				for(int q=0;q<9;q++) {
					row.add(Integer.valueOf(splitLine[q+1]));
				}
			}
			else if(line==1) {
				ArrayList<Integer> row = new ArrayList<Integer>();
				allNumbers.get(allNumbers.size()-1).add(row);
				
				for(int q=buff.get(i).split(";").length;q<9;q++) {
					splitLine[q]="0";
				}
				for(int q=0;q<9;q++) {
					row.add(Integer.valueOf(splitLine[q]));
				}
			}
			else if(line==2) {
				ArrayList<Integer> row = new ArrayList<Integer>();
				allNumbers.get(allNumbers.size()-1).add(row);
				for(int q=buff.get(i).split(";").length;q<9;q++) {
					splitLine[q]="0";
				}
				for(int q=0;q<9;q++) {
					row.add(Integer.valueOf(splitLine[q]));
				}
				createBoard(controleNumber, allNumbers.get(allNumbers.size()-1));
				line=-1;
			}
			line++; 
		}
	}

	public static ArrayList<String> readFile(File file) {
		FileInputStream fileInputStream = null;
		ArrayList<String> buff = new ArrayList<String>();
		String line;
	
		try {
			fileInputStream = new FileInputStream(file);
			BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));
			while ((line = bufferedReader.readLine())!= null) {
				buff.add(line);
			}
		} 
		catch (IOException ex) {
			Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
		} 
		finally {
			try {
				fileInputStream.close();
			} 
			catch (IOException ex) {
				Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
			}
		}
		return buff;
	}

	public static void addNumber(int number) {
		numbers.add(number);
	}

	public static ArrayList<Integer> getNumbers() {
		return numbers;
	}
}
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 11 2010
Added on Apr 11 2010
8 comments
353 views