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í.

Diskuze: Object to Double

Aktivity
Avatar
veselyjan22
Člen
Avatar
veselyjan22:19.11.2014 12:22

Zdravim,

řeším takovou srandu ale nevim jak z toho ven.

Jedná se o program, jako Editor matic. Skládá se mi zatím ze 4 tříd a main třídy. Dvě třídy z toho, jsou pouze pro uživateský prostředí, který jsem se rozhodl tvořit pomocí GUI Swing. Nejdříve se zobrazí okno, zadám rozměry matice, kliknu na vytvořit matici a otevře se mi nový okno s tabulkou. A nějaký tlačítka pro kontrolu tabulky a operace co chci s maticí dělat. Až sem nevidím problém.

Tabulku vyplním, nechám zkontrolovat a pokud je vše v pořádku, zaktivní se mi tlačítka pro operace s maticí. Po kliknutí na tlačítko jsem si nechal "zatím" vypisovat jak vypadá ta matice po operaci. Úplně jinak. Problém je ale i v tom, že když si matici nechám vypsat před operací, vypíše se mi úplná hovadina. než kterou jsem zadal do tabulky. Jelikož hodnotu z prvku tabulky přes metodu na objektu DefaultTableMo­del.getValueAt nastavit jako hodnotu prvku matice typu Matice(jedna z mojich tříd) je blbost, protože matice je z dvourozměrného pole double ale ta metoda na default modelu mi vrací objekt.

Nejspíš jsem zvolil dost blbou logiku jak to vyplňovat, ale chci se zeptat - má tohle nějaký řešení? Například existuje něco jako převod typu Object do Double?

Díky, omlouvám se za dlouhý text, ale snažil jsem se to popsat aby tomu šlo porozumět.

public class Event2 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent f) {
            Matice mat = new Matice(pV);
            for (int i = 0; i < pocetPrvku; i++) {
                for (int j = 0; j < pocetVektoru; j++) {
                    mat.setValueAt(m.getValueAt(i, j), i, j);
                }
            }
            mat.printMatice();
            mat.horni();
            mat.printMatice();

m je DefaultTableModel a pocetPrvku i pocetvektoru jsou atributy třídy

 
Odpovědět
19.11.2014 12:22
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na veselyjan22
Matěj Kripner:19.11.2014 15:50

Nevím, jestli jsem tě dobře pochopil, ale předpokládám, že ta "hovadina" je složena z řetězců podobných tomuto:

java.lang.Object@15db9742

To je výstup metody toString() tak, jak ji definuje třída Object.
Pokud je v proměnné typu Object uložen objekt(reference na objekt) typu Double, můžeš ho jednoduše přetypovat:

Double d = (Double)object; // Proměnná object je typu Object, ale je v ní uložena reference na objekt typu Double

To ale podle mě nebude tvůj případ. Nedělám ve Swingu, ale myslím, že třída tabulky bude generická a když generický typ definuješ, bude metoda getValueAt vracet třeba String, s kterým už si poradíš.

 
Nahoru Odpovědět
19.11.2014 15:50
Avatar
veselyjan22
Člen
Avatar
Odpovídá na Matěj Kripner
veselyjan22:19.11.2014 16:42

To jsi tu "hovadinu" pochopil velice správně. Tenhle zápis přetypování object typu Object na Double jsem už někde našel, ale ne takhle napsaný. Takže to určitě vezmu na vědomí a pokusím se to nějak využít. Každopádně můžu pořád hodnotu vracenou getValueAt přetypovat na String a z toho pak parsovat double ne? Mám za to, že jsem to už taky zkoušel, ale nejspíš jsem tomu nedal takovou pozornost.

Každopádně díky, to přetypování se pokusím nějak zapasovat a uvidím co to udělá.

 
Nahoru Odpovědět
19.11.2014 16:42
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na veselyjan22
Matěj Kripner:19.11.2014 18:15

Jak jsem říkal, do Swingu nevidím a nevím, zda je tady přípustné přetypování. Zkus dokumentaci: https://docs.oracle.com/…leModel.html

 
Nahoru Odpovědět
19.11.2014 18:15
Avatar
veselyjan22
Člen
Avatar
Odpovídá na Matěj Kripner
veselyjan22:24.11.2014 13:56

Tak super. Nakonec jsem měl problém úplně někde jinde :`. Nahrával jsem moc informací do vektorů typu Vektor (kde byli souřadnice ArrayList<Double>), tudíž se mi vytvářela matice úplně o jiných rozměrech.

Pak vážně funguje

double d = Double.parseDouble((String)Object);

... bral bych to spíš jako "pseudokód" ... :D

Každopádně děkuji velice, jen jsem to musel vidět zas z jiné strany.

 
Nahoru Odpovědět
24.11.2014 13:56
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 5 zpráv z 5.