Avatar billede musicchart.dk Nybegynder
12. april 2003 - 12:06 Der er 20 kommentarer og
1 løsning

Split med int

Hej eksperter

Jeg har en int string: 47658353

kan man så ikke lave en split, der sætter hvert enkelt tal ind i et array?

Har prøvet dette:

int[] ary = int_ver.split("");


/Bjarke
Avatar billede musicchart.dk Nybegynder
12. april 2003 - 12:13 #1
så mit array kommer til at se sådan ud:
{"4","7","6","5","8","3","5","3"}
Avatar billede arne_v Ekspert
12. april 2003 - 12:23 #2
String s = "47658353";
int[] ia = new int[s.length()];
for(int i = 0; i < ia.length; i++) {
    ia[i] = Integer.parseInt(s.substrint(i,i+1));
}
Avatar billede arne_v Ekspert
12. april 2003 - 12:24 #3
Eller:

String s = "47658353";
String[] ia = new String[s.length()];
for(int i = 0; i < ia.length; i++) {
    ia[i] = (s.substrint(i,i+1);
}

hvis du vil have String array.
Avatar billede repsak Nybegynder
12. april 2003 - 12:24 #4
dette burde virke...
String t = "123456";
String tabel[] = new String[t.length];

for(int i=0 ; i<tabel.length ; i++){
    tabel[i] = (String) t.charAt(i);
}
Avatar billede arne_v Ekspert
12. april 2003 - 12:25 #5
Og hvis jeg nu retter nogen af tyrk-fejlene:

String s = "47658353";
int[] ia = new int[s.length()];
for(int i = 0; i < ia.length; i++) {
    ia[i] = Integer.parseInt(s.substring(i,i+1));
} Kommentar: arne_v

String s = "47658353";
String[] ia = new String[s.length()];
for(int i = 0; i < ia.length; i++) {
    ia[i] = s.substring(i,i+1);
}

hvis du vil have String array.
Avatar billede repsak Nybegynder
12. april 2003 - 12:25 #6
hehe havde ikke set arne_v's indlæg :-)
Avatar billede arne_v Ekspert
12. april 2003 - 12:32 #7
repsak>

Man kan ikke caste fra char til String.
Avatar billede repsak Nybegynder
12. april 2003 - 12:35 #8
hmm ok jeg havde ikke testet det... Øv da - det burde man da kune :-)
Avatar billede repsak Nybegynder
12. april 2003 - 12:37 #9
men så burde man da kunne lave et char array istedet for String... og så skrive new String(charArray);
Avatar billede arne_v Ekspert
12. april 2003 - 12:37 #10
Ja. Det var sådan set meget logisk hvis man kunne.

Men man kan ikke.
Avatar billede arne_v Ekspert
12. april 2003 - 12:41 #11
charAt returnerer bare en char ikke et char array.

Men:

tabel[i] = "" + t.charAt(i);

ser ud til at virke.
Avatar billede musicchart.dk Nybegynder
12. april 2003 - 13:13 #12
hmmm.. problemet er bare at det er en int streng jeg starter med, og der kan man da ikke bruge substring, kan man?
Avatar billede arne_v Ekspert
12. april 2003 - 13:18 #13
Du mener at du starter med en int ?

int val = 47658353;
int[] ia = new int[(int)(Math.log(val)/Math.log(10))+1];
int tmp = val;
for(int i = 0; i < ia.length; i++) {
  ia[ia.length - i - 1] = tmp % 10;
  tmp = tmp / 10;
}

[utestet !!!!]
Avatar billede musicchart.dk Nybegynder
12. april 2003 - 13:18 #14
eller tage .length for den sags skyld ...
Avatar billede arne_v Ekspert
12. april 2003 - 13:22 #15
Jeg testede lige og det ser ud til at virke.
Avatar billede musicchart.dk Nybegynder
12. april 2003 - 13:22 #16
virker fint!!... tak!
Avatar billede musicchart.dk Nybegynder
12. april 2003 - 13:22 #17
;O)
Avatar billede arne_v Ekspert
12. april 2003 - 13:41 #18
log er en lidt halvdyr operation, så hvis den skal kaldes
milliarder af gange, så kan du omkode det til f.eks.:

        int val = 47658353;
        int[] ia = new int[digits(val)];
        int tmp = val;
        for (int i = 0; i < ia.length; i++) {
            ia[ia.length - i - 1] = tmp % 10;
            tmp = tmp / 10;
        }


    private static int digits(int v) {
        if(v < 10000) {
            if(v < 100) {
                if(v < 10) {
                    return 1;
                } else {
                    return 2;
                }
            } else {
                if(v < 1000) {
                    return 3;
                } else {
                    return 4;
                }
            }
        } else {
            if(v < 1000000) {
                if(v < 100000) {
                    return 5;
                } else {
                    return 6;
                }
            } else {
                if(v < 10000000) {
                    return 7;
                } else {
                    return 8;
                }
            }
        }
    }
Avatar billede musicchart.dk Nybegynder
15. april 2003 - 14:21 #19
arne_v >> jeg ved ikke om det er for meget forlangt, men jeg ville blive meget glad hvis du ville kommentere den kode du postede (12/04-2003 13:18:44). Du skal nok få 60 point for det...
Avatar billede arne_v Ekspert
15. april 2003 - 14:33 #20
// her har vi start værdien
int val = 47658353;
// log10(x) = log(x)/log(10)
// antal cifre i val = log10(val)+1 = log(val)/log(10)+1
// alloker array med antal cifre
int[] ia = new int[(int)(Math.log(val)/Math.log(10))+1];
// tmp=val
int tmp = val;
// for antal cifre i val
for(int i = 0; i < ia.length; i++) {
  // array element bagfra = sidste ciffer i tmp
  ia[ia.length - i - 1] = tmp % 10;
  // drop sidste ciffer i tmp
  tmp = tmp / 10;
}

hjalp det ?
Avatar billede arne_v Ekspert
15. april 2003 - 14:41 #21
Logaritme tricket kan så erstattes af koden fra 13:41:54 kommentaren
for 1-8 cifrede tal.
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