26. juni 2008 - 17:38Der er
15 kommentarer og 1 løsning
Returnere parseInt?
Hejsa eksperter, jeg undrer mig, hvorfor er følgende handling forkert?
public int encrypt(String buffer){ int b = Integer.parseInt(buffer,27); return b; }
Jeg kalder funktionen med strengen "test1" som argument, men når den del af koden bliver kørt, får jeg smidt følgende direkte i hovedet:
Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "test1" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:447) at java.lang.Integer.valueOf(Integer.java:553) at Main.Crypt.encrypt(Crypt.java:18) at Main.Client.run(Client.java:41)
Jeg ønsker blot, at min sætning "test1", eller en anden tekst, vil blive konveret til tal .. Jeg har forsøgt med alt, har endda forsøgt lignende: int b = Integer.parseInt("1651464"); Men jeg kan bare ikke få den til at konvertere til tal :S
Well, min overordnede problemstilling er, at jeg gerne vil have et AuthID produceret ud fra brugernavn + kode .. Altså et ID, som klienten sender med sin kommando, således at det garantere at det er den rette klient der sender den givne kommando afsted, da jeg skal benytte mig af noget lignende: AuthID:Kommando:Argu1:Argu2 Et AuthID, som kunne se således ud "832311167:MOVE:18:32"
Du kan bruge BigInteger til det, men det er ikke sikkert.
Et par ideer:
1)
client logger ind med brugernavn + password server giver client et random token og gemmer selv en reference mellem dette og brugernavn client sender dette random token med hver kommando server checker om token er OK og henter brugernavn udfra dette
(det forudsætter så en krypteret forbindelse)
2)
server sender et random token til client client sender så brugernavn i klartekst + hash(random token + password) server checker så dette
ParseInt() metoden, prøver på at lave den string der bliver sendt med om til nogle tal, så hvis det er en blanding af bogstaver og tal vil den altid komme med en numberFormatException. Men hvis du kun vil have tallet ud af f.eks. "Test1".
Så skal du måske lave en for-sætning der kører det hele igennem og tjekker på om det er et tal eller en String. Måske noget ala det her:
public int encrypt(String buffer){ int k = 0; String tal = ""; for (int i = 0; i < buffer.length(); i++) { try{ String sub = buffer.substring(i, i+1); tal += Integer.parseInt(sub)+""; }catch(NumberFormatException nfe){ System.out.println("Catch"); } } k = Integer.parseInt(tal); return k; } Det her skulle i hvert fald fungere :)
Nu har jeg lige sat mig hurtigt ind i min egen situation igen, jeg glemte at poste, at jeg fandt en lettere løsning, end at lade klienten sende et Auth_ID .. Jeg havde glemt, at når klienten har en fast forbindelse til serveren, er der ikke behov for Auth_ID, fordi at den nemlig er forbundet til samme socket :) - Men angående selve spørgsmålet, så havde Arne et fornuftigt svar til den overordnede løsning, mens at paro havde en fungerende løsning til selve problemet, jeg er i et mindre dillemma, hvem bør jeg give point? :)
Vi lægger begge et svar, du vælger begge navne i comboboxen inden du klikker accepter og systemet deler points ligeligt (hvis du går i advanced mode kan du selv styre fordelingen).
Det ser ikke ud til at paro svarer, så giver Arne point, men kan give paro yderligere, hvis han lige kontakter mig :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.