Avatar billede quiw Nybegynder
26. juni 2008 - 17:38 Der 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)
Avatar billede arne_v Ekspert
26. juni 2008 - 17:44 #1
test1 er ikke en integer i 27 tals systemet (er du sikker på at du vil bruge det ????)
da t er nummer 19 i alfabetet og dermed 29 som tal !
Avatar billede quiw Nybegynder
26. juni 2008 - 17:56 #2
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
Avatar billede arne_v Ekspert
26. juni 2008 - 18:05 #3
int b = Integer.parseInt("1651464");

bør virke !

Det er altså ikke helt nemt at konvertere tekst til tal, fordi de tal kan blive meget store.
Avatar billede arne_v Ekspert
26. juni 2008 - 18:06 #4
new BigInteger(buffer.getBytes("UTF-8"))

måske
Avatar billede quiw Nybegynder
26. juni 2008 - 18:11 #5
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"
Avatar billede arne_v Ekspert
26. juni 2008 - 18:50 #6
Det lyder ikke sikkert.

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
Avatar billede paro Nybegynder
27. juni 2008 - 12:21 #7
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 :)
Avatar billede arne_v Ekspert
28. oktober 2008 - 23:32 #8
quiw ?
Avatar billede quiw Nybegynder
30. oktober 2008 - 07:48 #9
Wow, havde slet ikke noteret at jeg havde denne tråd åben..
- Må desværre lige hoppe videre nu, kigger lige på det når jeg er hjemme igen :)
Avatar billede quiw Nybegynder
31. oktober 2008 - 19:20 #10
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? :)
Avatar billede arne_v Ekspert
01. november 2008 - 02:36 #11
Du kunne jo også vælge at dele dem ...
Avatar billede quiw Nybegynder
01. november 2008 - 09:48 #12
Hvordan vil det fungere? :)
Avatar billede arne_v Ekspert
01. november 2008 - 19:25 #13
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).
Avatar billede quiw Nybegynder
02. november 2008 - 18:54 #14
Okay super, så må jeg bede jer begge om, at lægge et svar :)
Avatar billede arne_v Ekspert
02. november 2008 - 19:08 #15
.
Avatar billede quiw Nybegynder
19. november 2008 - 14:54 #16
Det ser ikke ud til at paro svarer, så giver Arne point, men kan give paro yderligere, hvis han lige kontakter mig :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester