Zerowe elementy tablicy w innej klasie

0

Witam
Stworzyłem sobie tablicę statyczną :

static int [] lista5 = new int[12];

Następnie została ona uzupełniona w dalszym ciągu programu.Gdy jednak próbuję się odwołać do jej elementów z innej klasy to okazuje się że są one zerowe, mimo iż w klasie macierzystej wszystko jest ok.Obie klasy są w tym samym pakiecie.

Pozdrawiam

0

W jaki sposób się odwołujesz? Zapewne tworzysz nowy obiekt klasy macierzystej, a w tym obiekcie tablica nie została uzupełniona i zawiera zera.

0

Np

System.out.println(KlasaMacierzysta.lista5[0]);
0

Pokaż więcej kodu.

  • pole lista5 jest static, jeżeli gdzieś wywołasz konstruktor new KlasaMacierzysta, to wyzerujesz tablicę lista5,
  • czy na pewno wypełniasz pole lista5, a nie zmienną lokalną o takiej samej nazwie.
0
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;

import javax.imageio.ImageIO;

public class Parser
{
	
	public static BufferedImage obcy;
	ArrayList<String> lista1 = new ArrayList<String>(); 
	ArrayList<String> lista2 = new ArrayList<String>(); 
	ArrayList<String> lista3 = new ArrayList<String>();
	ArrayList<String> lista4 = new ArrayList<String>();
	static int [] lista5 = new int[12];
	
	static int [] lista = {1,2,3}; // Ta jest dla porównania i dla niej jest ok


	
	Parser()
	{		
			try
			{
				obcy = 	ImageIO.read(getClass().getResource("/rysunek1.png"));
			}
			
			catch(Exception e)
			{
				e.printStackTrace();
			}
			
			
			
			
			File plik = new File("plikKonfiguracyjny.txt");
			try
			{
				Scanner odczyt = new Scanner(plik);
				StringTokenizer token;
				while(odczyt.hasNextLine())
				{
					token = new StringTokenizer(odczyt.nextLine(), " ");
					while(token.hasMoreElements())
					{
						lista1.add(token.nextToken());
					}
				}
			} catch (FileNotFoundException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
						
			for(int i = 0; i < lista1.size(); i++)
			{
				if(i%2 == 1)
				{
					
					lista2.add(lista1.get(i));
				
				}
			}			

			for(int i = 0; i < lista2.size() - 3; i++)
			{
				lista3.add(lista2.get(i));
			}
						
			StringTokenizer token2;

			for(int i = lista2.size() - 3; i < lista2.size(); i++)
			{
				token2 = new StringTokenizer(lista2.get(i), "x");
				while(token2.hasMoreElements())
				{
					lista4.add(token2.nextToken());
				}
			}			
			
			for(int i = 1; i <  lista3.size(); i++ )
			{
				lista5[i - 1] = Integer.parseInt(lista3.get(i));
			}
			
			for(int i = 0; i <  lista4.size(); i++ )
			{
				lista5[i+6] = Integer.parseInt(lista4.get(i));
			}
							
	}
		
		
	public static void main(String[] args)
	{
		Parser parser = new Parser();
		System.out.println(Arrays.toString(lista5));  //wypisuje [100, 0, 0, 0, 1, 8, 12000, 9000, 0, 0, 0, 0] co jest ok
	}

}

Druga klasa (ten sam pakiet)

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;



public class Gra extends JFrame implements ActionListener
{

	JButton cofnij = new JButton("Cofnij");
	JButton graj = new JButton("Graj");
	JLabel nickNapis = new JLabel("Podaj nick");
	JTextField nick = new JTextField();
	JLabel poziomNapis =  new JLabel("Wybierz poziom trudnosci");
	ButtonGroup grupa = new ButtonGroup();
	JRadioButton niski = new JRadioButton("Niski", true);
	JRadioButton sredni = new JRadioButton("Sredni");
	JRadioButton wysoki = new JRadioButton("Wysoki");
	
	private Gra()
	{
		setSize(600, 900);

		System.out.println(Parser.lista5[0]); // wypisuje 0 mimo iż powinno wypisywać 100
		System.out.println(Parser.lista[0]); // dobrze, wypisuje 1

		setTitle("Gra");
		grupa.add(niski);
		grupa.add(sredni);
		grupa.add(wysoki);
		Panel pGRUPA = new Panel();
		pGRUPA.add(poziomNapis);
		pGRUPA.add(niski);
		pGRUPA.add(sredni);
		pGRUPA.add(wysoki);

		
		Panel pCENTER = new Panel();
		pCENTER.setLayout(new BoxLayout(pCENTER, BoxLayout.LINE_AXIS));
		pCENTER.add(nickNapis);
		pCENTER.add(nick);
		
		Panel pSOUTH = new Panel();
		pSOUTH.add(cofnij);
		pSOUTH.add(graj);
		
		this.setLayout(new BorderLayout());
		this.add(pCENTER, BorderLayout.CENTER);
		this.add(pGRUPA, BorderLayout.NORTH);
		this.add(pSOUTH, BorderLayout.SOUTH);
		this.pack();
		this.setVisible(true);
		
		graj.addActionListener(this);
		cofnij.addActionListener(this);
	}
	
	private static Gra gra = new Gra();
	public static Gra getInstance()
	{
		return gra;
	}
	
	

	@Override
	public void actionPerformed(ActionEvent e)
	{
		Object zrodlo = e.getSource();
		
		if(zrodlo == cofnij)
		{
			dispose();
		}
	}

	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub

	}

}

W innych klasach jest tak samo.

0

Musisz najpierw zrozumieć czym się różnią obiekty od klas. Odstaw póki co okienka bo nie rozumiesz i nie umiesz podstaw programowania obiektowego.

0

Druga klasa akurat jest w większości nie moja, więc nadal czekam na odpowiedź

1

Tablica lista5 zawiera na starcie 12 zer, zmiany w tej tablicy dokonują się w konstruktorze klasy Parser. Kod klasy Gra nigdzie nie wywołuje konstruktora klasy Parser, zatem w tablicy lista5 są nadal zera.
Zrób np. tak:

        setSize(600, 900);
        new Parser();
        System.out.println(Parser.lista5[0]); // wypisuje 0 mimo iż powinno wypisywać 100
        System.out.println(Parser.lista[0]); // dobrze, wypisuje 1
0

Dziękuję :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1