28. februar 2003 - 15:59
Der er
72 kommentarer og 1 løsning
typeCast
hejsa igen :) Et array med objekter eks kontonr , beloeb, rente der er så en metode til saldo() som return saldo saldo er double og jeg skal fange den saldo i gui jeg har prøvet med return (String) saldo prøvet skrive der hvor jeg skal bruge det ((saldo)konto).saldo() den sidste er jeg meget i tviv med men på en eller anden måde skal den castes hvordan????
Annonceindlæg tema
28. februar 2003 - 16:05
#1
Hvis du har et Double objekt return saldo.toString(); Hvis din double er en simpel type Double aTmp = new Double(saldo); return aTmp.toString(); eller på den grimme facon: return ""+saldo; miknil
28. februar 2003 - 16:12
#2
Det er lidt svært at sige udfra dine oplysninger, men jeg vil tro at: Object o = a.get(i); double saldo = ((konto)o).saldo(); eller den mere kompake: double saldo = ((konto)a.get(i)).saldo(); er det du søger.
28. februar 2003 - 16:15
#3
metoden er denne i klassen Konto: public double Saldo() { return (String) saldo; } // saldo og skal bruge den i denne her metode public void saldo() { String s = ("" + konto.Saldo()); lab2.setText(saldoTxt + s + "" + result + " Kr."); lab2.setVisible(true); txt1.setVisible(false); pack(); } håber det hjælper lidt
28. februar 2003 - 16:16
#4
String s = ("" + konto.Saldo()); lab2.setText(saldoTxt + s + "" + result + " Kr."); disse to er test jeg har prøvet men uden resultat desvære :(
28. februar 2003 - 16:18
#5
Du kan ikke have en metode som du erklærer til at returnere en double men faktisk returnerer en String.
28. februar 2003 - 16:20
#6
public double Saldo() { return saldo; } // saldo eller: public String Saldo() { return Double.tostring(saldo); } // saldo
28. februar 2003 - 16:21
#7
Og du behøver slet ikke lave en masse konverteringer: lab2.setText(saldoTxt + konto.saldo() + "" + result + " Kr."); bør virke fint (med begge saldo metoderne).
28. februar 2003 - 16:21
#8
jo men Saldo er jo en double men den skal bruges i gui
28. februar 2003 - 16:23
#9
Opgave6.java:165: cannot resolve symbol symbol : method saldo () location: class Konto lab2.setText(saldoTxt + konto.saldo() + "" + result + " Kr."); ^ 1 error
28. februar 2003 - 16:26
#10
den er lidt trigi men result viser fint nok at det konto nr jeg taster ind ligger på eks plads 0 men skal have beløbet med i et tekst felt alså indestående
28. februar 2003 - 16:27
#11
Hov undskyld. Du har jo Saldo med stort ikke saldo med småt. Jeg prøver igen: lab2.setText(saldoTxt + konto.Saldo() + "" + result + " Kr.");
28. februar 2003 - 16:29
#12
Nu er der ikke nogle af dine kode fragmenter som viser hvordan du bruger array. Så jeg tror vi skal have lidt mere kode.
28. februar 2003 - 16:30
#13
Konti.getInstance().addKonto(new Konto("1111111", 2323.0, 2.5));
28. februar 2003 - 16:34
#14
fint med stort S i saldo men så får jeg det som jeg desvære hele tiden får: Exception occurred during event dispatching: java.lang.NullPointerException at Opgave6.saldo(Opgave6.java:165) at Opgave6$RadioListener.actionPerformed(Opgave6.java:182) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378) at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:268) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216) at java.awt.Component.processMouseEvent(Component.java:3715) at java.awt.Component.processEvent(Component.java:3544) at java.awt.Container.processEvent(Container.java:1164) at java.awt.Component.dispatchEventImpl(Component.java:2593) at java.awt.Container.dispatchEventImpl(Container.java:1213) at java.awt.Component.dispatchEvent(Component.java:2497) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125) at java.awt.Container.dispatchEventImpl(Container.java:1200) at java.awt.Window.dispatchEventImpl(Window.java:926) at java.awt.Component.dispatchEvent(Component.java:2497) at java.awt.EventQueue.dispatchEvent(EventQueue.java:339) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:85) og det jeg får udaf det er at jeg er løbet udover mit array men ????
28. februar 2003 - 16:42
#15
En null pointer exception kan meget vel skyldes at du er kørt ud over antal elementer.
28. februar 2003 - 16:43
#16
Hvis du bruger en ArrayList (eller en af de andre collections) er der en size() metode der returnerer antal elementer i arrayet.
28. februar 2003 - 17:02
#17
yes arne ved jeg men det der gør jeg løver udover mit array er at den ikke kan finde den saldo efter min mening da den finder konto nr godt nok men så skal jeg have trukket beløbet ud arrayet bliver kørt igen med en forløkke i public int findKontoNummer(String nummer) { for( int i = 0; i < konti.size(); i++ ) { if( ((Konto)konti.get(i)).getnummer().equals(nummer) ) return i; } return -1;
28. februar 2003 - 17:03
#18
men jeg skal vel ikke lave en ny løkke for at finde beløb ?
28. februar 2003 - 17:09
#19
Nej. int ix = findKontoNummer(nr); if(ix >= 0) { Konto kto = (Konto)konti.get(ix); System.out.println("saldo for konto " + nr + " er " + kto.saldo()); } else { System.out.println("Konto " + nr + " eksisterer ikke"); }
28. februar 2003 - 17:50
#20
ørh nu er du jo ikke system.out jeg skal bruge da det anvendes i gui
28. februar 2003 - 17:58
#21
Hvis du får en null pointer exception så kunne det jo tænkes at konti.get(i) eller ((Konto)konti.get(i)).getnummer() returnerede null. for( int i = 0; i < konti.size(); i++ ) { Konto aKonto = (Konto)konti.get(i); if (aKonto == null) throw new Exception("Konto = null - i=" + i); String aNummer = aKonto.getnummer(); if (aNummer == null) throw new Exception("Nummer = null - i=" + i); if (aNummer.equals(nummer)) return i; } return -1; miknil
28. februar 2003 - 17:59
#22
Så får du da i det mindste en mere sigende exception.
28. februar 2003 - 18:06
#23
for at vende tilbage til cast :) public double Saldo() { Double aTmp = new Double(saldo); return aTmp.toString(); } skulle det så virke den påstår dette Konto.java:26: incompatible types found : java.lang.String required: double return aTmp.toString();
28. februar 2003 - 18:08
#24
To muligheder public String Saldo() { Double aTmp = new Double(saldo); return aTmp.toString(); } eller public double Saldo(){ Double aTmp = new Double(saldo); return aTmp.doubleValue(); }
28. februar 2003 - 18:09
#25
Du fortæller compileren du ønsker at returnere en double public double Saldo() Men istedet returnerer du en String return aTmp.toString(); miknil
28. februar 2003 - 18:13
#26
Hvis du ønsker at returnere en double og din member variable saldo er af samme type er der ingen grund til at involvere Klassen Double, istedet kan du returnere den direkte. public double Saldo() { return saldo; }
28. februar 2003 - 18:14
#27
ørh jo var det ikke lige hensigten at jeg skulle lave en double om til en String da det vel kan bruges direkte i GUI ?
28. februar 2003 - 18:15
#28
Se lige mit 16:20:06 indlæg.
28. februar 2003 - 18:17
#29
Det betyder ikke så meget om det er console eller GUI bare erstat System.out.println med label.setText: Nej. int ix = findKontoNummer(nr); if(ix >= 0) { Konto kto = (Konto)konti.get(ix); label.setText("saldo for konto " + nr + " er " + kto.saldo()); } else { label.setText("Konto " + nr + " eksisterer ikke"); }
28. februar 2003 - 18:17
#30
Så bruger du public String Saldo() { Double aTmp = new Double(saldo); return aTmp.toString(); }
28. februar 2003 - 18:17
#31
Og der bør slet ike være nogle konverterings-problemer.
28. februar 2003 - 18:18
#32
Som i mit 16:05:20 indlæg
28. februar 2003 - 18:19
#33
public String Saldo() { return Double.tostring(saldo); } // saldo rigtigt nok skulle bare være et stort S arne
28. februar 2003 - 18:24
#34
miknil> public String Saldo() { return Double.tostring(saldo); } // saldo er meget bedre end: public String Saldo() { Double aTmp = new Double(saldo); return aTmp.toString(); } [der er ikke nogen grund til at create et temporært objekt]
28. februar 2003 - 18:25
#35
Nej Arne det er det ikke! Fordi return Double.tostring(saldo); Giver en compile fejl
28. februar 2003 - 18:27
#36
godt nu er metoden saldo en String så skulle jeg da kunne hente den sådan ik ? lab2.setText(saldoTxt + konto.Saldo() + " Kr.");
28. februar 2003 - 18:27
#37
nbj1> En af de ting der forvirrer os er at man traditionelt har klasse navne startende med store bogstaver og metode navne startende med små bogstaver.
28. februar 2003 - 18:28
#38
nej den gør ikke miknil mangler bare et S string :)
28. februar 2003 - 18:30
#39
arne klassen starter oxo med stort og metoden med småt ??????
28. februar 2003 - 18:30
#40
hvis du hentyder til String er det en klasse arne
28. februar 2003 - 18:30
#41
miknil> uppercase det s fra tostring til toString, så virker det !
28. februar 2003 - 18:32
#42
nbj1> Jeg havde fået det indtryk at metoden saldo var med stort Saldo. Jeg kan jave taget fejl.
28. februar 2003 - 18:33
#43
Interessant nok er Saldo_2() ca dobbelt så hurtig på min maskine double saldo=12; public String Saldo_1() { return Double.toString(saldo); } public String Saldo_2() { Double aTmp = new Double(saldo); return aTmp.toString(); } public static void main(String[] args) { Test aTester = new Test(); long aStart = System.currentTimeMillis(); for(int i=0;i<100000;i++) aTester.Saldo_1(); long aEnd = System.currentTimeMillis(); System.out.println("1 = "+(aEnd-aStart)); aStart = System.currentTimeMillis(); for(int i=0;i<100000;i++) aTester.Saldo_2(); aEnd = System.currentTimeMillis(); System.out.println("2 = "+(aEnd-aStart)); } miknil
28. februar 2003 - 18:34
#44
> Arne "uppercase det s fra tostring til toString, så virker det !" I know
28. februar 2003 - 18:37
#45
> 18:33:23 Lidt for upræcist! Et par nuller extra, og så er de lige hurtige:
28. februar 2003 - 18:38
#46
Sku man gætte på der kommer præcis det samme bytecode ud i den anden ende ?
28. februar 2003 - 18:39
#47
Så muligvis dit forslag ikke er "meget bedre end:" mit ?
28. februar 2003 - 18:40
#48
hee det er da godt med scrol mouse så lang dette tema er ved at blive det er ligegyldigt om det tager en tidel sekundt længre/kortere lab2.setText(saldoTxt + konto.saldo() + " Kr."); det der er at konto.saldo() ikke fanger saldoet :)
28. februar 2003 - 18:43
#49
>nbj1 Beklager, jeg lod mig rive med :-( miknil.
28. februar 2003 - 18:44
#50
med dette kan jeg få alle konti´s skrevet ud men jeg skal kun have på det specifige kontonr?? lab2.setText(saldoTxt + Konti.getInstance().getKonti() + " Kr.");
28. februar 2003 - 18:47
#51
bare ok miknil :)
28. februar 2003 - 18:49
#52
Hvad præcis får du ud på din GUI, efter lab2.setText(saldoTxt + konto.saldo() + " Kr."); Bliver konto.saldo() til "0" eller "" ? eller andet miknil
28. februar 2003 - 18:50
#53
null pointer miknil
28. februar 2003 - 18:53
#54
Hvis du får en nullpointer Exception så må konto==null I så fald må det være koden der finder konto frem der er problemet.
28. februar 2003 - 18:57
#55
nej for når jeg skriver eks kontonr 1111111 så får jeg at kontoen er på plads 1 det giver + result lab2.setText(saldoTxt + "" + result + " Kr.");
28. februar 2003 - 18:58
#56
for at komme ind skriver jeg int result = Konti.getInstance().findKontoNummer(kontonummerTextField.getText()); if( result > -1 ) kontrol();
28. februar 2003 - 18:59
#57
Lidt uddybning ville hjælpe. Konti.getInstance() er en singleton "?" der returnerer et objekt af typen Konti ? Konti.getInstance().getKonti() returner et array (collection af en slags) af Konto objekter ? Konto aKonto = (Konto)konti.get(i);
28. februar 2003 - 19:05
#58
Prøv at tilføje lidt ektra checks før du opdaterer lab2 Konto konto = (Konto)konti.get(i); if (konto == null) lab2.setText("konto = null");
28. februar 2003 - 19:06
#59
Jeg kommer til at smutte nu, held og lykke - håber du får løst dit problem! miknil
28. februar 2003 - 19:06
#60
miknil> De generere ikke samme byte code. Og Saldo_2 er ca. 7 % langsommere end Saldo_1, hvilket du kan se ved at loope tilstrækkeligt mange gange. Det snyder ved få loops, fordi cost ved Saldo_2 delvist ligger ved når de temporære objekter skal GC'es. Og ved få loops sker det efter at du har sat aEnd !
28. februar 2003 - 19:11
#61
Arne> Jeg får samme resultat Også med loops der kører længe > (over 2 minut) miknil
28. februar 2003 - 19:11
#62
For Saldo_1 og Saldo_2 altså!
28. februar 2003 - 19:25
#63
Hmmm. Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode) 1 = 7360 2 = 7906 Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode) 1 = 9188 2 = 11859 Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cn130-20010609 (JIT enabled: jitc)) 1 = 14140 2 = 15735 BEA WebLogic JRockit(R) Virtual Machine (build 8.0-1.4.1_01-win32-CROSIS-20030124-1058, Native Threads, Generational Concurrent Garbage Collector) 1 = 7250 2 = 7812
28. februar 2003 - 19:27
#64
nbj1> Kan du poste hele din kode, så vi vi selv kan prøve at se, hvad der går galt ? Jeg har ihvertfald tabt overblikket !
28. februar 2003 - 19:32
#65
hee så skal jeg have en email da det er 6 filer arne
28. februar 2003 - 19:33
#66
Skulle du ikke overveje at afinstallere mindst 1 af dine JVM'er ? :-) Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode) 1 = 14782 2 = 15141 Et hurtigt overslag - ca 2.5 % miknil
28. februar 2003 - 19:34
#67
kan jeg godt forst arne jeg har fillerne men jeg kan ikke selv finde fejlen :)
28. februar 2003 - 19:37
#68
Du kan sende til arne_v@mail.danbbs.dk
28. februar 2003 - 19:43
#69
er hermed sendt hvis du har msn eller icq kan vi fortsætte derover
28. februar 2003 - 19:44
#70
miknil> Nej - jeg har brug for alle 4.
28. februar 2003 - 19:56
#71
Opgave6.java: public void kontrol() { Konti ktos = Konti.getInstance(); // <-------- konto = (Konto)ktos.getKonti().get(ktos.findKontoNummer(kontonummerTextField.getText())); // <----- rab1.setVisible(true); rab2.setVisible(true); rab3.setVisible(true); pack(); } public void saldo() { lab2.setText(saldoTxt + konto.Saldo() + " Kr."); // <----------------- lab2.setVisible(true); txt1.setVisible(false); pack(); }
28. februar 2003 - 19:57
#72
Så kan jeg ihvertfald få en saldo ud !
28. februar 2003 - 21:06
#73
det har du ret i arne Konti ktos = Konti.getInstance(); // <-------- konto = (Konto)ktos.getKonti().get(ktos.findKontoNummer de to linier gør forskellen hi så skal jeg bare finde udaf hæv og indsæt tak for hjælpen
Kurser inden for grundlæggende programmering