[ Príspevkov: 11 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

Cauko,
zacinam s Javou a uz odzaciatku som narazil na problem s ktorym neviem pohnut ani po hladani na nete.

Mam classu state, kde mam ulozeny 2D array z integerov (reprezentacia hlavolamu), konstruktor a getter ktory dane pole vrati.
Kód:
public class state
{
    private int x, y;
    private int[][] status;

    state(int a, int b, int[][] array) //constructor
    {
        this.x = a;
        this.y = b;
        this.status = Arrays.copyOf(array, array.length);
    }

   int[][] getStatus()
    {
        return Arrays.copyOf(status, status.length);
    }
}

V maine si chcem vytvorit 2 objekty, zaciatocny a konecny stav hlavolamu, ktore zadava uzivatel. Nacitam prvy vstup ktory ulozim do inputarray, nasledne vytovrim objekt a vypisem do konzoly:
Kód:
state startstate = new state(x, y, inputarray);
System.out.println(Arrays.deepToString(startstate.getStatus()));
Doteraz vsetko funguje ako ma. Problem nastane ked vytvorim druhy objekt rovnakym sposobom (pole inputarray bolo medzitym znova nacitane zo vstupu):
Kód:
state endstate = new state(x, y, inputarray);

Ked ale po tomto chcem vypisat obsah arrayov v jednotlivych objektoch, obidve metody getStatus vratia rovnake hodnoty, konkretne rovnaky array ako bol nacitane do objektu endstate a array v objekte startstate sa prepisal.

Co robim zle, resp kde konrketne mam chybu? Ako docielim aby oba objekty mohli mat jedinecne a rozdielne udaje, ku ktorym by som mohol pristupovat a menit ich nezavisle na sebe?


_________________
ITX >>> ATX
Offline

Užívateľ
Užívateľ
[Java] Konstruktory a ukladanie dat pre jednotlive objekty

Registrovaný: 02.12.06
Prihlásený: 04.02.25
Príspevky: 690
Témy: 35 | 35
Bydlisko: Rimavská So...

Len tip. Skús vrátiť priamo status nie jeho kópiu resp aj v konštruktore priraď priamo dané pole k tomu statusu


_________________
Math is the best!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

uz som skusal, nic


_________________
ITX >>> ATX
Offline

Užívateľ
Užívateľ
[Java] Konstruktory a ukladanie dat pre jednotlive objekty

Registrovaný: 19.05.08
Prihlásený: 21.01.25
Príspevky: 666
Témy: 28 | 28
Bydlisko: Slovensko

V konstruktore,

Kód:
status = new int[array.length][];
for (int i = 0; i < array.length; i++) {
    status[i] = Arrays.copyOf(array[i], array[i].length);
}


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

vdaka, funguje presne ako ma.

este otazka o getStatus, moze to zostat tak ako to je alebo aj tu treba upravit?


_________________
ITX >>> ATX
Offline

Užívateľ
Užívateľ
[Java] Konstruktory a ukladanie dat pre jednotlive objekty

Registrovaný: 19.05.08
Prihlásený: 21.01.25
Príspevky: 666
Témy: 28 | 28
Bydlisko: Slovensko

Vytvor objekt, vytiahni status, vypis hodnotu, zmen v nom nieco a znovu ho vytiahni a vypis hodnotu. Hned zistis ci sa reflektuje zmena do objektu teda ci ti poslal novu instanciu alebo iba referenciu :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

Odskúšané vypísané, všetko funguje :) Vďaka


_________________
ITX >>> ATX
Offline

Užívateľ
Užívateľ
[Java] Konstruktory a ukladanie dat pre jednotlive objekty

Registrovaný: 19.05.08
Prihlásený: 21.01.25
Príspevky: 666
Témy: 28 | 28
Bydlisko: Slovensko

si si isty ? :)
odskusaj si toto:
Kód:
        int[][] status = new int[2][2];
        status[0][0]=5;
        status[1][1]=3;
        state start=  new state(1,1,status); //vytvor objekt
        int[][] out = start.getStatus();//vytiahni status
        System.out.println(start.getStatus()[0][0]+","+start.getStatus()[1][1]);//vypis hodnotu
        out[0][0]=99;//zmen v nom nieco
        out[1][1]=33;//zmen v nom nieco
        System.out.println(start.getStatus()[0][0]+","+start.getStatus()[1][1]);//znovu ho vytiahni a vypis hodnotu


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

V algoritme vytiahnem pole, 4x ho zmením a vytvorím nové objekty. Po skončení algoritmu vypisem znova začiatočné pole, nerobi žiaden problém :)


_________________
ITX >>> ATX
Offline

Užívateľ
Užívateľ
[Java] Konstruktory a ukladanie dat pre jednotlive objekty

Registrovaný: 19.05.08
Prihlásený: 21.01.25
Príspevky: 666
Témy: 28 | 28
Bydlisko: Slovensko

Tak potom super, s tou povodnou metodou getStatus() by ti vsak malo zmenit hodnotu. Len aby sa ti nahodou nestalo niekde, ze by sa ti menili hodnoty a nevedel si odkial, ten kod co som postol by ti to ukazal. Ak by tam isla referencia, druhy vypis by ti zobrazil zmenene hodnoty.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 15.06.14
Prihlásený: 04.02.25
Príspevky: 17969
Témy: 143 | 143
Bydlisko: Bratislava

no tak na tvojom kode mi to meni povodne pole :D zaujimave

//ale uz som asi prisiel na to preco to v mojom pripade nemeni udaje, mam to riesene takto, kde vlastne len vytiahnem 2d array, ktory skopirujem a pracujem len s danou kopiou:
Kód:
            int[][] editedarray = act.getStatus();
            int[][] leftarray = new int[x][y];

            for (int i = 0; i < editedarray.length; i++)
            {
                leftarray[i] = Arrays.copyOf(editedarray[i], editedarray[i].length);
            }


_________________
ITX >>> ATX
 [ Príspevkov: 11 ] 


[Java] Konstruktory a ukladanie dat pre jednotlive objekty



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

c++ sqlite alebo xml pre ukladanie velkeho mnozstva dat

v Assembler, C, C++, Pascal, Java

5

483

09.07.2018 8:12

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Ukladanie dat v opere

v Sieťové a internetové programy

1

502

30.07.2009 11:35

marzo

V tomto fóre nie sú ďalšie neprečítané témy.

ukladanie dát z hry

v PHP, ASP

14

450

30.08.2014 19:40

bqoqyq

V tomto fóre nie sú ďalšie neprečítané témy.

spracovane + ukladanie dát do db

v PHP, ASP

14

551

10.03.2009 21:12

djsulo

V tomto fóre nie sú ďalšie neprečítané témy.

Samsung Galaxy Mini ukladanie dát

v Smartfóny a tablety

1

752

06.10.2012 13:07

Marko125

V tomto fóre nie sú ďalšie neprečítané témy.

Java - odchytávanie dát z portov

v Assembler, C, C++, Pascal, Java

0

443

25.01.2012 0:07

beny800

V tomto fóre nie sú ďalšie neprečítané témy.

phpBB2: Načo slúžia jednotlivé .tpl súbory

v Redakčné systémy

0

2590

11.02.2007 20:28

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

Java pre mobil

v Android, iOS, Windows Phone (Mobile)

1

589

30.09.2010 19:54

Forty-

V tomto fóre nie sú ďalšie neprečítané témy.

PHP Objekty

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PHP, ASP

58

3525

03.05.2011 17:42

misko16

V tomto fóre nie sú ďalšie neprečítané témy.

Photoshop objekty

v Grafické programy

4

482

26.08.2011 10:59

nickairsoft

V tomto fóre nie sú ďalšie neprečítané témy.

Dynamické objekty

v PHP, ASP

25

1129

04.01.2010 15:37

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

ActiveX objekty

v Ostatné programy

5

898

12.12.2010 0:04

playmaker

V tomto fóre nie sú ďalšie neprečítané témy.

Objekty ako polia

v PHP, ASP

7

730

03.01.2010 12:49

stenley

V tomto fóre nie sú ďalšie neprečítané témy.

Java developer pre oblasť poisťovníctva

v Ponuka práce

0

411

07.01.2014 15:30

salatekovaj

V tomto fóre nie sú ďalšie neprečítané témy.

Tvorba java hier pre mobily

v Počítačové hry

1

1400

12.12.2010 15:15

Raiper34

V tomto fóre nie sú ďalšie neprečítané témy.

P:3d tlačené objekty

v Predám

13

1399

25.11.2019 10:20

$ph!nX



© 2005 - 2025 PCforum, edited by JanoF