Avatar
Tomhaus
Člen
Avatar
Tomhaus:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 13.10.2014 18:55
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Tomhaus
Člen
Avatar
Tomhaus:

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:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:

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:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
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:

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
Redaktor
Avatar
Odpovídá na Tomhaus
Matěj Kripner:

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
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Matěj Kripner
Tomhaus:

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:

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  +1 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:

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:

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:

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:

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:

Jo a ty si do atributu Point 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:

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:

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:

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ý
Redaktor
Avatar
Odpovídá na Hit
Jan Vargovský:

Ú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  ±0 21.10.2014 22:25
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Hit
Tomhaus:

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:

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:

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:

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:

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:

Žá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:

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:
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:

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:

: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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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.