webForum webForum sponsras med lina och serverplats av Binero AB

Gå tillbaka   webForum > Utveckling > Programmering & Utveckling > Java

Java Diskussioner om all typ av Javautveckling.

Svar
 
Trådverktyg Visningsalternativ
Äldre 2008-01-14, 15:00   #1
rollo
Medlem
 
Registrerad: 2001-08-03
Ort: malmö
Inlägg: 203
Lösningar: 0
konvertera string till int

Tjena!

Jag sitter och meckar med en webshop och skall modifiera ett värde

Värdet finns i denna variablen header.getNetValue(), men när jag försöker konvertera till int, så blir det syntax error (dessvärre så ser jag inte felet).

int num=Integer.parseInt(header.getNetValue()); ger alltså syntax error, hur tusan får jag det till integer så att jag kan multiplicera värdet???


Tack på förhand!


rollo
rollo besöker inte forumet just nu   Svara med citat
Äldre 2008-01-14, 15:27   #2
SPiN
Medlem
 
Registrerad: 2000-03-13
Ort: Göteborg
Inlägg: 5 832
Lösningar: 197
Är värdet helt numeriskt? Fångar du exceptions någonstans?
Kod:
int num;
try {
     num = Integer.parseInt(header.getNetValue());
} catch(NumberFormatException e) {
     /* Inte bara siffror i strängen */
}
__________________
"Knock off the hippie shit, strap on a helmet and start shooting. This is Malibu, baby! I want you to storm that beach like it's fuckin' Normandy!"
SPiN besöker inte forumet just nu   Svara med citat
Äldre 2008-01-14, 16:07   #3
rollo
Medlem
 
Registrerad: 2001-08-03
Ort: malmö
Inlägg: 203
Lösningar: 0
Värdet är en summa, så det bör vara numeriskt.

Enda gången jag kan fånga värdet är om jag gör
String rollo = header.getNetValue();

försöker jag göra det till int istället så krashar sidan

rollo
rollo besöker inte forumet just nu   Svara med citat
Äldre 2008-01-14, 16:41   #4
spango
Medlem
 
spangos avatar
 
Registrerad: 2000-06-03
Ort: Söders höjder
Inlägg: 6 147
Lösningar: 910
Om Integer.parseInt "kraschar" torde det antagligen bero på en av två saker:
  1. header.getNetValue() returnerar null, vilket orsakar NullPointerException i parseInt; eller
  2. du skickar in en sträng som inte är ett giltigt tal och får därmed NumberFormatException.
Går dock inte att säga mer utan att veta vilket exception som kastas.
__________________
Vissa dagar är man asfalten, andra dagar är man ångvälten.
Vissa dagar är man myggan, andra dagar är man vindrutan.

XML är som våld; löser det inte ens problem betyder det att man använder för lite.
spango besöker inte forumet just nu   Svara med citat
Äldre 2008-01-14, 16:53   #5
rollo
Medlem
 
Registrerad: 2001-08-03
Ort: malmö
Inlägg: 203
Lösningar: 0
ok, jag får försöka jaga rätt på felet på något sätt.

Jag ser att värdet är 0.00 i vart fall om det kan vara någon hjälp.

(är det nu ni säger; "för fan, det där skulle du sagt från början!!!")

rollo
rollo besöker inte forumet just nu   Svara med citat
Äldre 2008-01-14, 17:09   #6
spango
Medlem
 
spangos avatar
 
Registrerad: 2000-06-03
Ort: Söders höjder
Inlägg: 6 147
Lösningar: 910
Japp
0.00 är inte ett heltal utan ett flyttal och är således inte kosher indata till parseInt... du får använda någon form av flyttal, som double.
Kod:
double num;
try {
     num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
     /* Inte bara siffror i strängen */
}
__________________
Vissa dagar är man asfalten, andra dagar är man ångvälten.
Vissa dagar är man myggan, andra dagar är man vindrutan.

XML är som våld; löser det inte ens problem betyder det att man använder för lite.
spango besöker inte forumet just nu   Svara med citat
Äldre 2008-01-15, 08:45   #7
rollo
Medlem
 
Registrerad: 2001-08-03
Ort: malmö
Inlägg: 203
Lösningar: 0
:l solly!


Jag kör med din kod

Kod:
double num;
try {
	 num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
	 /* Inte bara siffror i strängen */
	out.println("NEJ!");	 
}
och försöker skriva ut värdet med <%=num%>, men det dumpar.


Jag har hittat en log som verkar ge mig ett felet.

Kod:
Jan 15, 2008 8:16:16 AM,409 SAPEngine_Application_Thread[impl:3]_39 Error bbcom.sapmarkets.isa.core.ActionServlet [released|system.exception] An exception has occurred: {0}
com.sap.engine.services.servlets_jsp.server.jsp.exceptions.CompilingException: Error while executing the compilation process: [C:/usr/sap/QD1/JC00/j2ee/cluster/server0/apps/sap.com/crm.b2b/servlet_jsp/b2b/work/jsp_order1200381374441.java:1016: variable num might not have been initialized
			out.print(num);
                                  ^
1 error
].
	at com.sap.engine.services.servlets_jsp.server.jsp.JavaCompiler.compileExternal(JavaCompiler.java:142)
	at com.sap.engine.services.servlets_jsp.server.jsp.JavaCompiler.compile(JavaCompiler.java:238)
	at com.sap.engine.services.servlets_jsp.server.jsp.JSPParser.generateJavaFile(JSPParser.java:369)
	at com.sap.engine.services.servlets_jsp.server.jsp.JSPParser.parse(JSPParser.java:107)
	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.getClassName(JSPServlet.java:238)
	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.compileAndGetClassName(JSPServlet.java:429)
	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:169)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
	at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
	at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1758)
	at com.sapmarkets.isa.core.ActionServlet.processActionForward(ActionServlet.java:267)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1595)
	at com.sapmarkets.isa.core.ActionServlet.process(ActionServlet.java:430)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:491)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.runServlet(FilterChainImpl.java:117)
	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.doFilter(FilterChainImpl.java:62)
	at com.sapmarkets.isa.isacore.TealeafFilter.doFilter(TealeafFilter.java:71)
	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.doFilter(FilterChainImpl.java:58)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:384)
	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:365)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:944)
	at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:266)
	at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
	at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:160)
	at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
	at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
	at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
	at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

Jag tolkar det som om variablen num inte är deklarerad korrekt, men fattar inte hur jag skall deklarera den!


Tack på förhand!


rollo
rollo besöker inte forumet just nu   Svara med citat
Äldre 2008-01-15, 09:48 Markerad som löst av rollo   #8
spango
Medlem
 
spangos avatar
 
Registrerad: 2000-06-03
Ort: Söders höjder
Inlägg: 6 147
Lösningar: 910
Ah, my bad. Mitt exempel var visst lite minimalt. När man skriver så här:
Kod:
double num;
try {
     num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
     /* Inte bara siffror i strängen */
}
out.println(num);
... så leder inte alla "paths of execution" till att num initieras. Om parseDouble kastar ett exception, så får num aldrig något värde, och har man inte tilldelat en variabel ett värde får man inte använda variabeln. Det finns i princip två sätt att lösa det på:
Kod:
// variant 1: ge ett defaultvärde
double num = 0;
try {
     num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
     /* Inte bara siffror i strängen */
}
out.println(num);

// variant 2a: kasta vidare exception
double num = 0;
try {
    num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
     // kasta vidare ett undantag med bättre felmeddelande och en
     // referens till det ursprungliga undantaget
     throw new ServletException("getNetValue returned invalid double value", e);
}
out.println(num);
Variant två är nog att föredra i ditt fall. Om getNetValue() inte returnerar ett giltigt tal borde det vara ett ganska allvarligt fel (kolla dokumentationen dock, att den returnerar String och inte double är underligt men kan ha något skäl), så det kan gott propageras uppåt. Anledningen till att det funkar att göra på detta vis är att när man kommer till out.println-raden efter try/catchen, så kan kompilatorn se att antingen körs try-blocket hela vägen igenom, i vilket fall num har initierats, eller så avbryts det pga exception, varpå catch-blocket kör. Eftersom catch-blocket alltid kastar vidare ett undantag vet man då att man bara kommer till out.println om hela try-blocket körts, och i sådana fall har num initierats, varför den kan användas.
__________________
Vissa dagar är man asfalten, andra dagar är man ångvälten.
Vissa dagar är man myggan, andra dagar är man vindrutan.

XML är som våld; löser det inte ens problem betyder det att man använder för lite.
spango besöker inte forumet just nu   Svara med citat
Äldre 2008-01-15, 11:38   #9
rollo
Medlem
 
Registrerad: 2001-08-03
Ort: malmö
Inlägg: 203
Lösningar: 0
Alternativ 1 funkade perfekt!

Hade du varit här så hade du fått en stor blöt puss!
rollo besöker inte forumet just nu   Svara med citat
Äldre 2008-01-15, 14:37   #10
spango
Medlem
 
spangos avatar
 
Registrerad: 2000-06-03
Ort: Söders höjder
Inlägg: 6 147
Lösningar: 910
Var också medveten om att alt. 1 är det fulare av de tu. En dag kommer komma då du sitter och kliar dig i huvudet och undrar varför i hela fridens namn alla kolumner har "0" som värde, eftersom du sväljer undantaget. Logga det i alla fall:
Kod:
double num = 0;
try {
     num = Double.parseDouble(header.getNetValue());
} catch(NumberFormatException e) {
     log("error parsing getNetValue(); using default value " + num, e);
}
out.println(num);
__________________
Vissa dagar är man asfalten, andra dagar är man ångvälten.
Vissa dagar är man myggan, andra dagar är man vindrutan.

XML är som våld; löser det inte ens problem betyder det att man använder för lite.
spango besöker inte forumet just nu   Svara med citat
Svar
webForum > Utveckling > Programmering & Utveckling > Java

Trådverktyg
Visningsalternativ

Forumregler
Du får inte posta nya trådar
Du får inte posta svar
Du får inte bifoga filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är av
HTML-kod är av

Forumhopp


Alla tider är i GMT +1. Klockan är nu 22:27.


Powered by: vBulletin Version 3.8.6
Copyright © webForum