IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:13.10.2014 18:35

Ahoj, existuje nějaký jiný způsob zapisování číselných hodnot než do pole? Potřeboval bych něco jako tabulku pole, která by měla x-ovou a y-ovou souřadnici a když bych zadal souřadnici tak by mi to vypsalo tu hodnotu, která je na dané souřadnici ,nebo bych tu hodnotu mohl změnit. Nevím jestli se ptám správně, ale něco takového asi musí existovat.

Odpovědět
13.10.2014 18:35
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:13.10.2014 18:55

Samozřejmě existuje celá řada kolekcí. Pro tebe ale asi bude vhodné pole polí. To znamená založení:

int[][] = new int[10][10];

a ukládání(ulozis hodnotu 23 na zouradnice x a y):

int[x][y] = 23;
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.10.2014 18:55
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:13.10.2014 20:38

a kdybych chtěl pak vykreslit tu hodnotu (resp. číslo jako string) v paintu a dát mu pozici úzce související s pozicí v tabulce, tak tu x-ovou a y-ovou souřadnici (pro všechny možnosti) můžu převést jak? Nechce se mi psát tolikrát

if(x = 1 && y = 1){
xCoor = 3;
yCoor = 3;
}
if(x = 2 && y = 1){
xCoor = 43;
yCoor = 3;
}

atd...

Nahoru Odpovědět
13.10.2014 20:38
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:13.10.2014 21:04

Na tvém místě bych si vytvořil další pole polí a v něm hodnoty pozic pro daný index. Jako hodnotu bych zvolil něco jako třídu Point, která reprezentuje hodnotu x a y. Např. na indexech 1, 1 by byla hodnota new Point(3, 3) a na indexech 2, 1 hodnota new Point(43, 3).

 
Nahoru Odpovědět
13.10.2014 21:04
Avatar
Tomhaus
Člen
Avatar
Tomhaus:13.10.2014 21:25

A ještě bych chtěl vědět, když mam posuvný rámeček(posouvá se po vykreslené tabulce), který jako ukazuje, kam se to číslo zadává v tabulce, takže já potřebuju zjistit aktuální polohu toho rámečku, ale nemůžu ji udělat relativní, protože se mi to číslo přemisťuje i s tím rámečkem, když posunu ten rámeček.

g.drawString("1", border.getxCoor(), border.getyCoor());

Pro vysvětlení dám obrázky:

Nahoru Odpovědět
13.10.2014 21:25
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:13.10.2014 21:26

a jakým for loopem to mam nechat přiřadit? nebo to mam snad přiřazovat ručně?

Editováno 13.10.2014 21:27
Nahoru Odpovědět
13.10.2014 21:26
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:14.10.2014 6:57

To co jsem psal v posledním příspěvku by asi nebyl nejlepší postup. Zkus vytvořit nějaký objekt s atributy x, y, a hodnota a ten použij jako typ pole polí. Pokud chceš k tomu rámečku později přistupovat, ukládej si jeho souřadnice.

 
Nahoru Odpovědět
14.10.2014 6:57
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:14.10.2014 19:51

myslíš nějakou tabulku?

Nahoru Odpovědět
14.10.2014 19:51
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:14.10.2014 20:06

jo, ale jak můžu přiřadit tři data do jednoho objektu?

Nahoru Odpovědět
14.10.2014 20:06
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:14.10.2014 21:41

Uložíš ty tři data jako atributy toho objektu a přiřadíš k nim gettery. Myslím, že je to návrhový vzor kontejner nebo tak něco.

 
Nahoru Odpovědět
14.10.2014 21:41
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:16.10.2014 19:50

To mam vytvořit novou třídu nebo to není potřeba?

Nahoru Odpovědět
16.10.2014 19:50
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:16.10.2014 20:48

Musíš vytvořit novou třídu, když chceš specifikovat její atributy a následně ji použít jako typ pole :)

 
Nahoru Odpovědět
16.10.2014 20:48
Avatar
Tomhaus
Člen
Avatar
Nahoru Odpovědět
16.10.2014 22:17
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:19.10.2014 21:59

a jak mam přiřadit každýmu prvku pole polí ten atribut, když musim tomu atributu ještě nastavit ty hodnoty?

Nahoru Odpovědět
19.10.2014 21:59
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Tomhaus
Matěj Kripner:20.10.2014 18:14

Asi jsi mě nepochopil. Do pole ukládáš objekty a tyto objekty mají data uložená ve svých atributech.

 
Nahoru Odpovědět
20.10.2014 18:14
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:20.10.2014 19:39

jenom sem vynechal slovo objekt, a jak to mam tedy realizovat?

Nahoru Odpovědět
20.10.2014 19:39
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Hit:20.10.2014 22:26

Zdarec, nevím, jestli chápu správně, co chceš, ale zkusil jsem něco vytvořit, kdyžtak dej vědět, jestli pomohlo ;)

Main třída:

import java.util.ArrayList;


public class Main {
    private final Point[][] coordinations;
    private final ArrayList<Point> values = new ArrayList();
    private int y;

    public Main(){
        coordinations = new Point[10][10];

        values.add(new Point(43,5));
        values.add(new Point(35,10));
        values.add(new Point(7,20));
    }


    public static void main(String[] args) {
        Main m = new Main();

        m.fillCoords();
        m.printCoords();
    }

    public void fillCoords(){
        for (int x = 0; x < values.size(); x++){
            System.out.println("Na souradnici: " + x + " " + y + " vkladam: " + values.get(x).getX() + " " + values.get(x).getY());
             coordinations[x][y] = values.get(x);
             y++;
        }

    }

    public void printCoords(){
        y = 0;
        for (int x = 0; x < values.size(); x++){
                System.out.println("==================================");
                System.out.println("Pozice: ");
                System.out.println(x + " " + y);
                System.out.println("Hodnota: ");
                System.out.println(coordinations[x][y].getX() + ", " + coordinations[x][y].getY());

                y++;
            }
        }
  }

Třída Point:

public class Point {
    private int x = 0;
    private int y = 0;


    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}
Nahoru Odpovědět
20.10.2014 22:26
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:21.10.2014 8:01

Já potřebuju do pole polí uložit objekt, kterej bude mít atribut s pozicí(na konec ta pozice bude neměnná) a hodnotu na té pozici. A ještě bych se chtěl zeptat, jak se dají do atributu vyplnit třeba jen ty pozice, když tu hodnotu na té pozici neznám.

Nahoru Odpovědět
21.10.2014 8:01
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:21.10.2014 10:45

V tom případě by ti měl ten kód vyhovovat :). Máš tam třídu Point, jejíž instance představují tu danou pozici (např. 43, 5). Ve třídě Main máš pole polí typu Point a kolekci ArrayList taky typu Point a funguje to tak, že si vytvoříš tu hodnotu s pozicí a přidáš ji do ArrayListu. Metodou fillCoords pak na souřadnice přiřadíš ty hodnoty z Listu, je to postavený tak, že na pozici [0][0] dáš hodnotu (43,5), na pozici [1][1] dáš (7, 20) atd.

Nahoru Odpovědět
21.10.2014 10:45
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:21.10.2014 11:45

A načítání udělám přes gettery?

Nahoru Odpovědět
21.10.2014 11:45
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:21.10.2014 15:43

Jj, ty hodnoty z toho dostanes takhle: coordinations[x][y]­.getX() / getY() , ukázku máš v metodě printCoords :)

Nahoru Odpovědět
21.10.2014 15:43
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:21.10.2014 17:32

Jo a ty si do atributu <i>Point</i> nezahrnul ještě tu hodnotu na té pozici. Takže to tam stačí jenom dopsat do publicu?

Nahoru Odpovědět
21.10.2014 17:32
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Hit:21.10.2014 20:18

Takže ty chceš mít jedno dvourozměrný pole, v dejme tomu Point[10][10], v tom budou uložený souřadnice např. (10,5) a k tomu budou ještě tyhle souřadnice mít v sobě uloženou nějakou hodnotu? :D Kdyžtak pls napiš přesnej příklad.

Editováno 21.10.2014 20:20
Nahoru Odpovědět
21.10.2014 20:18
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:21.10.2014 20:39

jj přesně si to definoval :D

Editováno 21.10.2014 20:39
Nahoru Odpovědět
21.10.2014 20:39
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Hit:21.10.2014 22:21

Ok, trochu jsem to upravil, přidal jsem tam třídu Value, která představuje danou hodnotu na souřadnici (nevěděl jsem, jak má ta hodnota vypadat, takže jsou tam konstruktory pro 1 i 2 hodnoty)

Main:

public class Main {
    /**
     * Dvourozměrné pole
     */
    private final Position[][] field;

    /**
     * Kolekce souřadnic
     */
    private final ArrayList<Position> coordinations = new ArrayList();

    /**
     * Pomocná proměnná pro adresování v poli
     */
    private int y;

    /**
     * Xová souřadnice v poli
     */
    private int xPos;

    /**
     * Ypsilonová souřadnice v poli
     */
    private int yPos;

    /**
     * První hodnota na souřadnici
     */
    private int a;

    /**
     * Druhá hodnota na souřadnici
     */
    private int b;


    /**
     * Bezparametrický konstruktor - zinicializuje pole a přidá do ArrayListu
     * nové souřadnice spolu s jejich hodnotou
     */
    public Main(){
        field = new Position[10][10];

        coordinations.add(new Position(43,5, new Value(50)));
        coordinations.add(new Position(35,10, new Value(20)));
        coordinations.add(new Position(7,20, new Value(30)));
    }


    public static void main(String[] args) {
        Main m = new Main();

        m.fillCoords();
        m.printCoords();
    }

    /**
     * Uloží hodnoty z ArrayListu na určené indexy v poli
     */
    public void fillCoords(){
        y = 0;
        for (int x = 0; x < coordinations.size(); x++){
            field[x][y] = coordinations.get(x);
            a = field[x][y].getValue().getA();
            b = field[x][y].getValue().getB();
            xPos = field[x][y].getX();
            yPos = field[x][y].getY();
            System.out.println("Na index: " + x + " " + y
                    + " vkladam: " + xPos + " " + yPos +
                    " s hodnotou: " + "A: " + a + " B: " + b);


             y++;
        }

    }

    /**
     * Vypíše indexy, souřadnice a hodnoty pro kontrolu
     */
    public void printCoords(){
        y = 0;

        for (int x = 0; x < coordinations.size(); x++){
            a = field[x][y].getValue().getA();
            b = field[x][y].getValue().getB();
            xPos = field[x][y].getX();
            yPos = field[x][y].getY();

            System.out.println("==================================");
            System.out.println("Index v poli: ");
            System.out.println("[" + x + "]" + " " + "[" + y + "]");
            System.out.println("Souřadnice: ");
            System.out.println(xPos + ", " + yPos);
            System.out.println("Hodnota na souřadnici: ");
            System.out.println("A: " + a + " B: " + b);

            y++;
            }
        }
  }

Position:

public class Position {
    private int x = 0;
    private int y = 0;
    private Value value;

    /**
     * Konstruktor inicializuje xovou pozici, ypsilonovou pozici a hodnotu
     * @param x Souřadnice
     * @param y Souřadnice
     * @param v Hodnota
     */
    public Position(int x, int y, Value v){
        this.x = x;
        this.y = y;
        this.value = v;
    }

    /**
     * Konstruktor inicializuje xovou pozici, ypsilonovou pozici
     * @param x Souřadnice
     * @param y Souřadnice
     */

    public Position(int x, int y){
        this(x, y, null);
    }

    /**
     * Vrací X
     * @return X
     */
    public int getX() {
        return x;
    }

    /**
     * Vrací Y
     * @return Y
     */
    public int getY() {
        return y;
    }

    /**
     * Vrací hodnotu
     * @return Hodnota
     */
    public Value getValue(){
        return value;
    }

}

Value:

public class Value {
    private int a;
    private int b;

    /**
     * Konstruktor pro případ potřeby zadání dvou hodnot
     * @param a Hodnota
     * @param b Hodnota
     */
    public Value(int a, int b){
        this.a = a;
        this.b = b;
    }

    /**
     * Konstruktor zinicializuje hodnotu a
     * @param a Hodnota
     */
    public Value(int a){
        this(a, 0);
    }

    /**
     * Vrací a
     * @return Hodnota
     */
    public int getA() {
        return a;
    }

    /**
     * Vrací b
     * @return Hodnota
     */
    public int getB() {
        return b;
    }

    /**
     * Vrací hodnotu
     * @return Hodnota
     */
    public Value getValue(){
        return this;
    }
}
Nahoru Odpovědět
21.10.2014 22:21
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Hit
Jan Vargovský:21.10.2014 22:25

Úplně by ti stačilo místo těch tříd jen udělat 2d pole intů a to už samo o sobě je matice, která jde reprezentovat jako sudoku.

EDIT: čtu zbytek vlákna a trošku mimo. Myslel jsem, že je to jiné téma.

Editováno 21.10.2014 22:27
 
Nahoru Odpovědět
21.10.2014 22:25
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 17:47

Jo takhle by to šlo jen máš chybu v ukládání těch hodnot: ty hodnoty to uloží jen po úhlopříčce toho 2D pole. Ale drobet vim, jak bych to vyřešil, klidně mi můžeš poslat svůj návrh :D

PS: Sry, že píšu takhle pozdě, teprve teď jsem se do toho pustil :D

Nahoru Odpovědět
7.11.2014 17:47
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 17:52

A taky si musíš při psaní toho ukládacího (přiřazovacího) algorytmu uvědomit, že v tom ArrayListu těch souřadnic a hodnot je celkovej počet větší než x-ová souřadnice toho 2D pole, takže by to chtělo trošku upravit.

Jak nad tim přemejšlim, tak ty sis asi myslel, že když to vkládání uděláš takhle, tak se to uloží všude a nejen na tu úhlopříčku.

Nahoru Odpovědět
7.11.2014 17:52
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Hit:7.11.2014 18:00

Věděl jsem, že to bude ukládat do uhlopříčky, ale myslel jsem, že to tak chceš (špatně jsem si přečetl ten tvůj příklad s ifama :D)

Editováno 7.11.2014 18:01
Nahoru Odpovědět
7.11.2014 18:00
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 18:04

chci aby se to ukládalo po celim poli, kdybych chtěl úhlopříčku, tak se neptam, protože to můžu rovnou udělat jednořádkový pole :D

Nahoru Odpovědět
7.11.2014 18:04
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 18:06

a píše mi to nějakou chybu: java.lang.Arra­yIndexOutOfBou­ndsException: 9 asi to bude znamenat, že já mam ten ArrayList větší než 9 a že se jich vypsalo jen 9, protože já mam taky to 2D pole 9 x 9 a po každým řádku musim udělat y++

Nahoru Odpovědět
7.11.2014 18:06
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 18:13

Žádnou chybu to nepíše, když tam místo ArrayList.size() dam číslo 9.
Mam návrh, jak by se to mohlo řešit: co takhle z toho cyklu vyndat to y++, dát až za ten cykl a celý to zacyklovat? :D celkem divnej nápad, ale podle mej teorie by měl fungovat :D jakej máš na to ty názor?

Nahoru Odpovědět
7.11.2014 18:13
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 18:25

Jo a jak mam upravit to coordinations­.get(x) ? protože když bych tohle dal do cyklu s počtem celkovýho počtu položek v ArrayListu, tak by se ty cykly mezi sebou násobily a to já nechci :)

Nahoru Odpovědět
7.11.2014 18:25
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:7.11.2014 18:39
public class Main {
    /**
     * Dvourozměrné pole
     */
    private final Position[][] field;

    /**
     * Kolekce souřadnic
     */
    private final ArrayList<Position> coordinations = new ArrayList();

    /**
     * Uchovává počet vložených Xových prvků do pole
     */
    private int xLength = 0;

    /**
     * Uchovává počet vložených Ypsilonových prvků do pole
     */
    private int yLength = 0;

    /**
     * Xová souřadnice v poli
     */
    private int xPos;

    /**
     * Ypsilonová souřadnice v poli
     */
    private int yPos;

    /**
     * První hodnota na souřadnici
     */
    private int a;

    /**
     * Druhá hodnota na souřadnici
     */
    private int b;


    /**
     * Bezparametrický konstruktor - zinicializuje pole a přidá do ArrayListu
     * nové souřadnice spolu s jejich hodnotou
     */
    public Main(){
        field = new Position[10][10];

        coordinations.add(new Position(43,5, new Value(50)));
        coordinations.add(new Position(35,10, new Value(20)));
        coordinations.add(new Position(7,20, new Value(30)));
    }


    public static void main(String[] args) {
        Main m = new Main();

        m.fillCoords();
        m.printCoords();
    }

    /**
     * Uloží hodnoty z ArrayListu na určené indexy v poli
     */
    public void fillCoords(){
        int index = 0;
        for (int x = 0; x < coordinations.size(); x++){
            for (int y = 0; y < coordinations.size(); y++) {
                field[x][y] = coordinations.get(index);
                a = field[x][y].getValue().getA();
                b = field[x][y].getValue().getB();
                xPos = field[x][y].getX();
                yPos = field[x][y].getY();

                System.out.println("Na index: " + x + " " + y
                        + " vkladam: " + xPos + " " + yPos +
                        " s hodnotou: " + "A: " + a + " B: " + b);

                index++;
                yLength++;
            }
            xLength++;
            if (index == coordinations.size()){
                    break;
            }
        }

    }

    /**
     * Vypíše indexy, souřadnice a hodnoty pro kontrolu
     */
    public void printCoords(){
        for (int x = 0; x < xLength ; x++){
            for (int y = 0; y < yLength; y++){
                a = field[x][y].getValue().getA();
                b = field[x][y].getValue().getB();
                xPos = field[x][y].getX();
                yPos = field[x][y].getY();

                System.out.println("==================================");
                System.out.println("Index v poli: ");
                System.out.println("[" + x + "]" + " " + "[" + y + "]");
                System.out.println("Souřadnice: ");
                System.out.println(xPos + ", " + yPos);
                System.out.println("Hodnota na souřadnici: ");
                System.out.println("A: " + a + " B: " + b);
            }
            }
        }
  }
Editováno 7.11.2014 18:39
Nahoru Odpovědět
7.11.2014 18:39
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 18:47

hele nemělo by bejt u těch cyklů, že se maj taky ukončit v xLength a yLength?

BTW: klidně tam nemusíš psát dvě hodnoty na tej danej pozici, mě tam stačí jedna :D

zkusim to otestovat :D

Editováno 7.11.2014 18:48
Nahoru Odpovědět
7.11.2014 18:47
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:7.11.2014 19:01

:D uprav si to jak potřebuješ

Nahoru Odpovědět
7.11.2014 19:01
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 19:04

no trošku sem to upravil a místo coordinations­.size() jsem tam dal číslo, protože já vim kolik řádků a sloupců má to 2D pole.

a vyskytla sem tam jedna drobná chybička s tim počítáním toho yLength, protože ty cykly se mezi sebou násobí, tak když mam pole 9x9 mam yLength 81 :D a má to bejt jen 9 :D

Nahoru Odpovědět
7.11.2014 19:04
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 19:12

jo a mam jednu chybu, která se už netýká toho pole a vypisuje se jen někdy: java.lang.NullPo­interException vypisuje se mi tu u rámečku, kterej vykresluju z jinýho souboru (asi atributu :D nevim jak ho definovat) v grafickym paintu pomocí: border.draw(g); to border je jeho název :D

a píše mi to chybu s nějakým nulovým bodem nebo nevim, co to je :D

Nahoru Odpovědět
7.11.2014 19:12
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:7.11.2014 19:23

No, možná by sis měl nejdřív pročíst nějaký tutoriály než začneš něco takovýho dělat. :D Přijde mi, že nevíš základní věci.

Nahoru Odpovědět
7.11.2014 19:23
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:7.11.2014 19:28

Upravil jsem to, a při výpisu už mi to nepíše žádnou chybu

public class Main {
    /**
     * Dvourozměrné pole
     */
    private final Position[][] field;

    /**
     * Kolekce souřadnic
     */
    private final ArrayList<Position> coordinations = new ArrayList();

    /**
     * Délka Xové souřadnice pole
     */
    private int xLength = 10;

    /**
     * Délka Ypsilonové souřadnice pole
     */
    private int yLength = 10;

    /**
     * Xová souřadnice v poli
     */
    private int xPos;

    /**
     * Ypsilonová souřadnice v poli
     */
    private int yPos;

    /**
     * První hodnota na souřadnici
     */
    private int a;

    /**
     * Druhá hodnota na souřadnici
     */
    private int b;

    private Random r = new Random();


    /**
     * Bezparametrický konstruktor - zinicializuje pole a přidá do ArrayListu
     * nové souřadnice spolu s jejich hodnotou
     */
    public Main(){
        field = new Position[xLength][yLength];

        for (int i = 0; i < 100; i++){
            coordinations.add(new Position(r.nextInt(50), r.nextInt(50), new Value(r.nextInt(100))));
        }
        /*coordinations.add(new Position(43,5, new Value(50)));
        coordinations.add(new Position(35,10, new Value(20)));
        coordinations.add(new Position(7,20, new Value(30)));*/
    }


    public static void main(String[] args) {
        Main m = new Main();

        m.fillCoords();
        m.printCoords();
    }

    /**
     * Uloží hodnoty z ArrayListu na určené indexy v poli
     */
    public void fillCoords(){
        int index = 0;
        for (int x = 0; x < xLength; x++){
            for (int y = 0; y < yLength; y++) {
                field[x][y] = coordinations.get(index);
                a = field[x][y].getValue().getA();
                b = field[x][y].getValue().getB();
                xPos = field[x][y].getX();
                yPos = field[x][y].getY();

                System.out.println("Na index: " + x + " " + y
                        + " vkladam: " + xPos + " " + yPos +
                        " s hodnotou: " + "A: " + a + " B: " + b);

                index++;
            }
            if (index == coordinations.size()){
                    break;
            }
        }
    }

    /**
     * Vypíše indexy, souřadnice a hodnoty pro kontrolu
     */
    public void printCoords(){
        int x = 0;
        int y = 0;
        while (field[x][y] != null){

            a = field[x][y].getValue().getA();
            b = field[x][y].getValue().getB();
            xPos = field[x][y].getX();
            yPos = field[x][y].getY();

            System.out.println("==================================");
            System.out.println("Index v poli: ");
            System.out.println("[" + x + "]" + " " + "[" + y + "]");
            System.out.println("Souřadnice: ");
            System.out.println(xPos + ", " + yPos);
            System.out.println("Hodnota na souřadnici: ");
            System.out.println("A: " + a + " B: " + b);

            x++;
            y++;

            if (y == xLength){
                y = 0;
            }
            if (x == yLength){
                break;
            }
        }
    }
  }
Editováno 7.11.2014 19:28
Nahoru Odpovědět
7.11.2014 19:28
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 19:37

teprve se to učim, takže vim jen základní věci :)

Nahoru Odpovědět
7.11.2014 19:37
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:7.11.2014 20:05

jo a dá se nějak ta hodnota na té pozici převést na vlákno? abych ji mohl vykreslit

Editováno 7.11.2014 20:06
Nahoru Odpovědět
7.11.2014 20:05
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:7.11.2014 21:18

když chci všechny ty hodnoty nechat vyreslit, tak používam:

for(int i = 0; i < 9; i++){
                        for(int j = 0; j < 9; i++){
                                g.drawString(Integer.toString(coordinations[j][i].getValue()), coordinations[j][i].getX(), coordinations[j][i].getY());
                        }
                }

a vložil jsem tohle do vykreslovače, ale hlásí mi to chybu: Exception in thread "AWT-EventQueue-0" java.lang.Arra­yIndexOutOfBou­ndsException

Co s tím mam dělat ikdyž jsem převedl tu hodnotu na té pozici na String?

Editováno 7.11.2014 21:20
Nahoru Odpovědět
7.11.2014 21:18
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:7.11.2014 22:43

IndexOutOfBounds znamená, že indexuješ mimo rozsah pole, může to být tím, že máš u těch coordinations prohozeno i/j.

Já to mám takhle a funguje

@Override
    public void paint(Graphics g){
        g.setColor(Color.BLACK);
        int xPos = 20;
        int yPos = 10;

        for (int x = 0; x < field.length; x++){
            for (int y = 0; y < field.length; y++){
                g.drawString(Integer.toString(field[x][y].getValue().getA()), xPos, yPos);
                g.drawString(Integer.toString(field[x][y].getValue().getB()), xPos               + 20, yPos);

                yPos += 10;
            }
        }
    }
Nahoru Odpovědět
7.11.2014 22:43
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:8.11.2014 11:42

stokrát sem to prohlížel až sem našel chybu :D je to v tom druhym cyklu :D přičítam 1 ke špatný proměnný :D

Nahoru Odpovědět
8.11.2014 11:42
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:8.11.2014 11:56

a ta chyba: java.lang.NullPo­interException s ní mam dělat co?

Nahoru Odpovědět
8.11.2014 11:56
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:8.11.2014 12:43

mam ten rámeček a potřebuju zjistit na jakej je pozici, k tomu použiju: border.getX() a border.getY()

a teď potřebuju zjistit, kde se tahle pozice nachází v tom 2D poli

jak tohle mam udělat?

Nahoru Odpovědět
8.11.2014 12:43
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Hit
Člen
Avatar
Odpovídá na Tomhaus
Hit:8.11.2014 13:46

NullPointerEx­ception říká, že chceš pracovat s prázdnou hodnotou(NULL). A tu pozici si najdi třeba tak, že si vezmeš to pole, přes for to projedeš a IFem budeš kontrolovat, kde se ta hodnota rovná tý, kterou hledáš.

Nahoru Odpovědět
8.11.2014 13:46
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Tomhaus
Člen
Avatar
Tomhaus:8.11.2014 17:19

to s tou pozicí sem už vyřešil přesně takhle

a nevim co je s tou prázdnou hodnotou, odkazuje mě ta chyba na border.draw(g);
a nevim co to má společnýho s nulovou hodnotou, když ten rámeček má přesný souřadnice, kde se má zobrazit :)

Nahoru Odpovědět
8.11.2014 17:19
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 49 zpráv z 49.