rikard81Medlem sedan mars 2007311 inlägg Har bestämt mig för att lära mig lite javaprogrammering. HTML och CSS är jag rätt duktig på, men det här är första gången jag kommer i kontakt med Java och hederlig programmering. Har köpt boken Java direkt med swing och har nu lärt mig litegrann. Tycker det är riktigt spännande faktiskt, problemet är att många av kodexemplen i boken ej är korrekta. Det saknas exempelvis en klammer här och var. Rätt trist. Jag brukar ta kapitel för kapitel och skriva av kod i boken och sedan sätta mig ner och studera koden för att förstå hur det hänger ihop. Många kod-exempel ur boken har man fått justera själv. något som inte är lätt när man är totalt newbie. Nu till saken:
Jag håller på med ett program i början av boken. Förstår lite hur det hänger ihop, men när jag skriver koden från boken får jag 5 errors. Har gått igenom noggrant och koden är identisk med den i boken. Det är så att jag ska skapa ett enkelt program, där man med hjälp av numeriska variabler och dialogrutor, räkna ut vad det kostar att hyra en bil per dag. Programmet ska då fråga efter dessa uppgifter i två dialogrutor och sedan beräkna den totala kostnaden. Så här lyder koden i boken, som tydligen inte stämmer alls. Vad är det egentligen som saknas?? Har försökt, men kan ej finna felet. Vad är det jag missat? Vore superglad för svar / Rikard
import static javax.swing.JOptionPane.*;
public class BilHyra {
public static void main (String [] arg) {
int antalDagar;
double dagsPris;
double totPris;
String indata;
indata = showInputDialog ("Antal dagar?");
antalDagar = Integer.parseInt (indata);
indata = showInputDialog ("Pris per dag?");
dagsPris = Double.parseDouble (indata);
totPris = dagsPris * antalDagar;
showMessageDialog (null, "Totalt pris: " + totPris);
System.exit(0);
}
}
ercizMedlem sedan maj 20011 826 inlägg Prova med
import javax.swing.JOptionPane;
public class BilHyra {
public static void main(String[] args) {
int antalDagar;
double dagsPris;
double totPris;
String indata;
indata = JOptionPane.showInputDialog("Antal dagar?");
antalDagar = Integer.parseInt (indata);
indata = JOptionPane.showInputDialog("Pris per dag?");
dagsPris = Double.parseDouble (indata);
totPris = dagsPris * antalDagar;
JOptionPane.showMessageDialog(null, "Totalt pris: " + totPris);
System.exit(0);
}
}
Jag vet inte vilken upplaga av Java Direkt med Swing du har. Men jag har den tredje (gul) från 2002. Exemplet är rätt i den upplagan. Men den första importraden är "import javax.swing.*;" istället för det jag skrev. Är du säker på att du har skrivit av boken rätt? Jag vet inte om ska ha static i importen som du skrev, men på slutet av den har du ett fel. Antingen skriver du "javax.swing.*;" eller så skriver du "javax.swing.JOptionPane;", den kombinationen som du skrev fungerar inte. Sen måste du skriva class-namnet när du anropar metoderna. Annars tycker jag att Java Direkt med Swing är en ganska bra bok för ändamålet, lär du dig allt i den kan du göra det mesta inom Java Swing programmering. Jag vet inte vad du använder för IDE, men jag rekommenderar Eclipse, då ser du direkt var i koden du har fel.
aronMedlem sedan mars 2004485 inlägg
rikard81 skrev:
får jag 5 errors.
Felmeddelandena brukar vara ganska vägledande, varför postade du inte med dem?
rikard81Medlem sedan mars 2007311 inlägg Tack för ditt svar ercis. Men vad menas med static i importraden? Jag använder mig utav den femte upplagan. När jag kopierar din kod får jag 3 errors, vet inte vad jag gör för fel. Så om jag skriver:
import javax.swing.*;
söker den väl igenom alla paket? Var skriver jag klassnamnen? och vilka räknas som klasser i min kod?
Jättetacksam för ditt svar/Rikard
rikard81Medlem sedan mars 2007311 inlägg
aron skrev:
Felmeddelandena brukar vara ganska vägledande, varför postade du inte med dem?
Har du helt rätt i. Dessa felmeddelanden får jag med koden ercis skickade. Tror dock felet ligger hos mig ;-)
C:\Javatester>javac BilHyra.java
BilHyra.java:9: cannot resolve symbol
symbol : variable JOptionPane
location: class BilHyra
indata = JOptionPane.showInputDialog("Antal dagar?");
^
BilHyra.java:11: cannot resolve symbol
symbol : variable JOptionPane
location: class BilHyra
indata = JOptionPane.showInputDialog("Pris per dag?");
^
BilHyra.java:15: cannot resolve symbol
symbol : variable JOptionPane
location: class BilHyra
JOptionPane.showMessageDialog(null, "Totalt pris: " + totPris)
;
^
3 errors
ercizMedlem sedan maj 20011 826 inlägg Det ser ut som att du inte fått till importraden korrekt. Kontrollera att den ser ut såhär:
import javax.swing.JOptionPane;
ercizMedlem sedan maj 20011 826 inlägg
rikard81 skrev:
Tack för ditt svar ercis. Men vad menas med static i importraden? Jag använder mig utav den femte upplagan. När jag kopierar din kod får jag 3 errors, vet inte vad jag gör för fel. Så om jag skriver:
import javax.swing.*;
söker den väl igenom alla paket? Var skriver jag klassnamnen? och vilka räknas som klasser i min kod?
Jättetacksam för ditt svar/Rikard
Inte alla paket, men alla classer i javax.swing. Sub-paket som t.ex. javax.swing.table söks inte igenom.
Jag vet faktiskt inte vad som menas med static i importraden, har aldrig använt det. Den variant som jag skrev är den jag brukar använda. Använder man Eclipse så behöver man inte skriva import-raderna manuellt, direkt när man skrivit den klass som man ska använda i koden så trycker jag Ctrl+Shit+O så importeras allt som behövs.
Klassnamnet på det du ska importera är JOptionPane och du skriver en klass som heter BilHyra.
rikard81Medlem sedan mars 2007311 inlägg Nu fick jag det att funka. Supertack. Så om man ska sammanfatta importraden så betyder detta att den importerar paket ifrån java?. Laddade ju ner JDK och där ligger alltså färdiga paket som man importerar?
rikard81Medlem sedan mars 2007311 inlägg Ska testa att ladda ner eclipse :-) Ska sätta mig och studera koden, återkommer om det är nått jag inte förstår. Tack för hjälpen.
ercizMedlem sedan maj 20011 826 inlägg
rikard81 skrev:
Nu fick jag det att funka. Supertack. Så om man ska sammanfatta importraden så betyder detta att den importerar paket ifrån java?. Laddade ju ner JDK och där ligger alltså färdiga paket som man importerar?
Ja, typ. Du importerar ju klasser som ligger i paket. Java SE innehåller en hel drös med färdiga paket och klasser att använda. Det har varit en av Javas styrkor. Det är få språk som har så stora färdigskrivna bibliotek som Java och .NET Framework.
ercizMedlem sedan maj 20011 826 inlägg Kom ihåg att Java har väldigt bra dokumentation och "tutorials" på internet. En enkel googling på "JOptionPane" länkar till en bra dokumentationssida:JOptionPane och det finns även ett avsnitt om den klassen i tutorialen How to Make Dialogs
rikard81Medlem sedan mars 2007311 inlägg Intressant. Tack för att du ställer upp med svar. Jag är en sån som måste förstå sammanhanget innan jag går vidare, så en sista fråga för kvällen. Alltså:
int antalDagar;
double dagsPris; <---- Dessa fyra är deklarerade variabler?
double totPris;
String indata;
indata = JOptionPane.showInputDialog("Antal dagar?"); <---Detta är den första variabeln där indata förs in, genom att skriva i dialogrutan som kommer upp.
antalDagar = Integer.parseInt (indata); <---Värdet hämtas i variabeln ovanför (indata). Värdet som alltså fördes in i dialogrutan som variabeln ovanför skapade. String står för text och nu är det siffror, därför omvandlas detta genom int?
indata = JOptionPane.showInputDialog("Pris per dag?"); <---Nästa variabel som ger en ny dialogruta, där ett värde skrivs in på samma sätt som den första variabeln.
dagsPris = Double.parseDouble (indata); <--Hämtar värdet från variabeln ovanför, Double.parse är väl ett hjälpmedel, Vad gör Double.parse?
totPris = dagsPris * antalDagar; <-- Räknar ut värdet i totPris * antalDagar.
JOptionPane.showMessageDialog(null, "Totalt pris: " + totPris); <--Värdet presenteras i en avslutande dialogruta. Totalt pris är en fast text i dialogrutan och totPris är värdet ovanför.
Är jag helt ute och seglar? Var en liten överblick över denna kod över skärmen. Ska lägga mig ner och läsa.
Jättetack för svaren / Rikard
ercizMedlem sedan maj 20011 826 inlägg Du har förstått det hela korrekt.
Integer.parseInt(indata) - Parsar en sträng och omvandlar till en int (heltal)
Double.parseDouble(indata) - Parsar en sträng och omvandlar till en double (decimaltal med dubbel precision)
rikard81Medlem sedan mars 2007311 inlägg Kanon. Nu hör jag ett anrop från sängen när min hjärna har fått värdet "sova". Tack för svaren. har varit till mycket hjälp. / Rikard
ercizMedlem sedan maj 20011 826 inlägg Ingen fara, kul att det är lite liv i Java-avdelningen. Markera gärna ett svar som lösning sen.
erciz skrev:
Inte alla paket, men alla classer i javax.swing. Sub-paket som t.ex. javax.swing.table söks inte igenom.
Korrekt. Och för att tillägga något om det... javax.swing är ett paket som innehåller en drös klasser, bl a JOptionPane. Och som också sagts tidigare så kan man importera allt i javax.swing med import javax.swing.*; eller bara den enskilda klassen med import javax.swing.JOptionPane; (Däremot kan du av uppenbara skäl inte importera javax.swing eller javax.swing.JOptionPane.* då ingen av de definitionerna pekar mot en eller en samling klasser.)
Dock finns det ett tredje alternativ, nämligen att låta bli att importera klassen och referera den med paketnamnet, t ex indata = javax.swing.JOptionPane.showInputDialog("Antal dagar?"); Det sättet att referera klasser är användbart om du någon gång skulle hamna i situationen att du behöver komma åt två klasser med samma namn som finns i olika paket.