Jeg kan ikke finde en fiks metode til at få en int kopieret over i et array. Jeg har erklæret et int’ array og vil nu have det mest betydende ciffer (talet 2) i 2000001 flyttet til tal[0], derefter det næst-mest betydende ciffer til index [1] osv.
Jeg benytter mig af Visual Studio 7.1 og får således ”hjælp” ved kodeskrivningen af Intellisense. Når jeg taster nummer. (prik) fremkommer en liste over metoder man kan bruge på denne integer. Men intet af det er ’lige det jeg har brug for’.
Det er let af finde online hjælp til kopiering mellem to arrays, men ikke til at bryde en integer ned i delelementer. Jeg var så småt ved at overveje at konvertere ’nummer’ til en string temp, og så bruge en temp.CopyTo(…, …, …, …); for derefter at typecaste tilbage til int… Men det er jo en tosset måde at gribe det an på.
Mock-up kode:
private int[] tal = new int[7]; private int nummer = 2000001;
public void Convert() { for(int i=0; i<7; i++) { tal[i] = nummer.? // hvad gør jeg her? } }
...som svarer til at tage det bagerste tal (i%10) og derefter flytte alle tal en tak til højre (i=i/10). i%10 vil altid være det mindst betydende ciffer
En lidt mere utraditionel måde at løse problemet på kunne være at konvertere tallet til en streng og så bruge en charAt lignende metode for at få fat i relevante cifre.
Hvis man ikke kender antal cifre og vil have dem vendt rigtigt:
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; }
hvor:
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; } } } }
arne_v: Muligvis ikke... er ikke klar over hvad et oprettet string objekt, kald til ToString() og et kald til .Length giver af compileret kode! Men, ved bare at overskueligheden er lidt bedre (Hvis man spørger mig). Men, måske du kan fortælle os det, jeg ville i hvert fald gerne lære lidt om forskellen ved de 2 måder at gøre det på.
Det var slet ikke for at sætte spørgsmålstegn ved din kode jo!
Sovsekoders ide virkede fint. Den er ikke særlig kompleks og gør arbejdet. Dog skal for-loopet vendes, så det tæller ned. Ellers vendes hele tallet (som du skriver, tages tallet fra det mindst betydende ciffer "LSD"):
public void Convert() { int temp = nummer; // tæller ned så tallet vender rigtigt i array'et for(int i=7; i<0; i--) { tal[i] = temp%10 temp = temp/10; } }
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.