Kompilator nie odnajduje zainicjalizowanej zmiennej.

0

Witajcie,
Napisałem dzisiaj program, który wypisuje obiekty o randomowych wartościach. Wszystko było w porządku dopóki w pętli wykorzystywałem jedną zmienną "x", kiedy chciałem do pętli dodać zmienną "y", która została już zinicjalizowana w ten sam sposób jak jak "x". Kod różni się tylko zmienną jaka została użyta nic poza tym. Siedzę nad tym już dobre pół godziny, analizowałem kod od początku do końca i nie znalazłem nic z czego mógłby wynikać błąd, choć pewnie gdzieś on tkwi, lecz moje oko początkującego programisty nie wychwyciło go. Prosiłbym o pomoc, jeśli ktoś dostrzega błąd, a jeśli ktoś byłby tak miły wytłumaczyć błąd jeśli jest on dość dziwny i nie polega on na jakiejś literówce. Dzięki! :)

Pastebin: http://pastebin.com/yQ9gTrym

import java.util.Random;

class SetCord
{
	public int x;
	public int y;
	private  int Id;
	private static int nextId = 1;
	public SetCord(int a, int b)
	{
		x=a;
		y=b;
	}
	public int getX()
	{
		
		Id=nextId;
		nextId++;
		return x;
	}
	public int getY()
	{
		
		Id=nextId;
		nextId++;
		return y;
	}

	public int getId()
	{
		return Id;
	}
}
   class Test{
    public static void main(String args[])
    { 
    Random rand = new Random();
    SetCord[] teste = new SetCord[3];
    
    for (int i = 0; i < 3; i++)
    {
    	teste[i] = new SetCord(rand.nextInt(100), rand.nextInt(35));
    	
    }
    
    for(SetCord x:teste)
    {
    
    System.out.println("x = " +  x.getX());
	System.out.println("y = " +  y.getY());        //blad kompilacj - y cannot be resolved
    System.out.println("x id " +  x.getId());
    System.out.println("y id " +  y.getId());  //blad kompilacj - y cannot be resolved
    	
   }  

    }
   
   
   }
1
    public int x; // masz składową x typu int
    public int y; // oraz składową y typu int
 
    for(SetCord x:teste) // tu przekrywasz x zmienną lokalną x typu SetCord
    {
    System.out.println("x id " +  x.getId());  // tu pobierasz Id z obiektu typu SetCord
    System.out.println("y id " +  y.getId());  // tu próbujesz pobrać Id z int'a - WTF?
    }
3
 
for (SetCord item : teste) {

            System.out.println("x = " + item.getX());
            System.out.println("y = " + item.getY()); 
            System.out.println("x id " + item.getId());
            //System.out.println("y id " + item.getId());//ta linia to powielona bez sensu

        }

Nie masz zmiennej y. Iterowałeś po x, który był zmienną typu SetCord a nie polem x obiektu typu SetCord.

0

Dziękuje za rady, udało mi się zmajstrować teraz takie coś, trochę przebudowałem kod. Teraz zastosowałem dwie pętle typu for each dopasowując tylko odpowiednia zmienną oraz dodałem zliczanie ID nowych obiektów. Wiem, może ta numeracja obiektów jaka występuje wydawać się trochę bezużyteczna, lecz będzie mi ona potrzebna w dalszej części. Chciałbym poznać Wasze zdanie czy teraz jak wygląda kod jest to jako tako w porządku czy dałoby radę to jakoś uprościć, aby nie było dwóch osobnych pętli? Ciekaw jestem Waszej perspektywy na ten kod jako doświadczeni programiści.

import java.util.Random;

class SetCord
{
	public int x;
	public int y;
	
	private static int nextXId;
	private static int nextYId;
	public SetCord(int a, int b)
	{
		x=a;
		y=b;
	}
	public int getX()
	{
		nextXId++;
		return x;
	}
	public int getY()
	{
		
		nextYId++;
		return y;
	}

	public int getXId()
	{
		return nextXId;
	}
	
	public int getYId()
	{
		return nextYId;
	}
}
   class Test{
    public static void main(String args[])
    { 
    Random rand = new Random();
    SetCord[] teste = new SetCord[3];
    
    for (int i = 0; i < 3; i++)
    {
    	teste[i] = new SetCord(rand.nextInt(100), rand.nextInt(35));
    	
    }
    
    for(SetCord x:teste)
    {
    
    System.out.println("x = " +  x.getX());
    System.out.println("x id - " +  x.getXId());
    	
   }  
    
    for(SetCord y:teste)
    {
    
	System.out.println("y = " +  y.getY());        //blad kompilacj - y cannot be resolved
    System.out.println("y id - " +  y.getYId());  //blad kompilacj - y cannot be resolved
    	
   }  

    }
   
   
   }
1

czy dałoby radę to jakoś uprościć, aby nie było dwóch osobnych pętli?

Dwie pętle są zbędne w twoim przypadku, bo iterujesz po tych samych elementach.

        for (SetCord item : teste) {

            System.out.println("x = " + item.getX());
            System.out.println("x id - " + item.getXId());
            
            System.out.println("y = " + item.getY());        
            System.out.println("y id - " + item.getYId());  

        }
 
2
Exilion napisał(a):

... dodałem zliczanie ID nowych obiektów ...
Nie masz żadnego zliczania Id nowych obiektów.
Obrazowo jeżeli ta twoja klasa to uczniowie, zaś y i x to rząd i miejsce na którym siedzą.
Masz zliczanie nie uczniów tylko ile razy ktoś spytał w którym rzędzie siedzi ... oraz ile razy ktoś spytał na którym miejscu w rzędzie siedzi ...

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