Avatar billede encorez Nybegynder
04. januar 2014 - 07:07 Der er 14 kommentarer og
1 løsning

BIgDecimal array

Hej

I et program skal jeg for en variabel måned i mine data, optælle antallet af f.eks. biler.
Jeg ved ikke på forhånd hvilken måned jeg skal optælle for.

Jeg tænker at lave et array med en entry for de pågældende måneder og så løbende tælle op efterhånden som jeg gennemgår data.

Men jeg har ikke styr på syntaksen.

Jeg forsøger mig med noget ala
while(){
BigDecimal optalt_biler = new BIgDecimal("55");
String month = "08";

BigDecimal[month] biler = BigDecimal[month].add(optalt_biler);
}

Dvs. per måned er der kun én optalt værdi.
Er der en nemmere måned at udskrive værdierne på end at løbe arrayet biler igennem, måned for måned, i en for-løkke 1 til 12?

På forhånd mange tak for hjælpen
Avatar billede arne_v Ekspert
04. januar 2014 - 15:19 #1
den kode der ser noget mystisk ud - den compiler naeppe

men til spoergsmaal om hvordan du itererer gennem alle maaneder kan du enten bruge traditionel for loekke:

for(int i = 0; i < 12; i++) {
  // process ditarray[i]
}

eller ny for loekke:

for(BigDecimal elm : ditarray) {
  // process elm
}
Avatar billede encorez Nybegynder
04. januar 2014 - 15:47 #2
Hehe, ja den er mystisk. Jeg prøvede mig lidt frem og kunne ikke få noget til at virke efter hensigten, så mit eksempel er skrevet af rimlig fri fantasi.

Kan du gennemskue hvad jeg mener og har brug for? Og hvordan jeg så kommer der til? Jeg tænker ikke det er kompliceret.

Hvis jeg i et datasæt har månederne 6, 8 og 9. Hvordan tæller jeg så mine bigdecimal værdier op for hver måned?
Avatar billede arne_v Ekspert
04. januar 2014 - 15:51 #3
Foerste spoergsmaal er: hvorfor bruger du BigDecimnal?
Avatar billede encorez Nybegynder
04. januar 2014 - 15:52 #4
Fordi jeg regner i kr og øre, og float var for upræcis til det jeg skulle bruge det til
Avatar billede arne_v Ekspert
04. januar 2014 - 16:02 #5
God begrundelse.

Men i #0 skrev du "antallet af f.eks. biler", saa jeg var lidt i tvivl.

Jeg proever lige at lave et eksempel.
Avatar billede arne_v Ekspert
04. januar 2014 - 16:06 #6
import java.math.BigDecimal;

public class BigDecimalFun {
    public static void main(String[] args) {
        BigDecimal[] bda = new BigDecimal[12];
        bda[0] = new BigDecimal("12.47");
        for(int i = 1; i < bda.length; i++) {
            bda[i] = bda[i-1].add(new BigDecimal("0.05"));
        }
        for(BigDecimal bd : bda) {
            System.out.println(bd);
        }
    }
}
Avatar billede encorez Nybegynder
04. januar 2014 - 16:18 #7
det ser måske ok ud. Dog mangler jeg at den måned som værdien skal lægges til, er f.eks. 02, 08, 10 eller 12, altså 2 decimaler.
Og månedens nummer kommer som String til at starte på.

Så hvordan kæder jeg det ind i bda[månedsnummer her]?
Avatar billede arne_v Ekspert
04. januar 2014 - 16:28 #8
index i arrays er altid int 0..N-1

hvis du vil bruge string, saa skal du have en HashMap<BigDecimal>

jeg proever med et eksempel
Avatar billede arne_v Ekspert
04. januar 2014 - 16:30 #9
ups

HashMap<String,BigDecimal>
Avatar billede arne_v Ekspert
04. januar 2014 - 16:34 #10
import java.math.BigDecimal;
import java.util.HashMap;

public class BigDecimalFun2 {
    public static void main(String[] args) {
        HashMap<String,BigDecimal> bdm = new HashMap<String,BigDecimal>();
        for(int i = 0; i < 12; i++) {
            String m = String.format("%02d", i+1);
            BigDecimal x = new BigDecimal(10+i);
            bdm.put(m, x);
        }
        for(String m : bdm.keySet()) {
            System.out.println(m + " " + bdm.get(m));
        }
    }
}

men jeg tror ikke at du er tilfreds med raekkefoelgen
Avatar billede arne_v Ekspert
04. januar 2014 - 16:37 #11
Jeg tror at du vil vaer bedst tjent med at bruge array og saa transformere "01" -> 0, ... "12" -> 11.
Avatar billede encorez Nybegynder
04. januar 2014 - 16:41 #12
muligvis ja, hvordan laver jeg lettest 01->0, 02->1 osv?
Avatar billede arne_v Ekspert
04. januar 2014 - 16:56 #13
public class S2I {
    private static int convert(String s) {
        return Integer.parseInt(s) - 1;
    }
    public static void main(String[] args) {
        String[] sa = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" };
        for(String s : sa) {
            System.out.println(s + " " + convert(s));
        }
    }
}
Avatar billede encorez Nybegynder
04. januar 2014 - 17:03 #14
Rigtig godt, det ser meget fornuftigt ud, og det får jeg nok til at virke :)

Læg et svar som stor tak for hjælpen
Avatar billede arne_v Ekspert
04. januar 2014 - 17:56 #15
svar
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

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



Seneste spørgsmål Seneste aktivitet
I går 20:46 opkaldside Af hagbartm i Mobiltelefoner
I går 16:05 win 10 vil ikke boote Af bb69 i Windows
I går 11:20 Lenovo x390 Af tobberjas i PC
I går 10:14 Alder i Excel Af Nanarsi i Excel
I går 09:00 Flere linier på faneblad Af Peder Lund Nielsen i Excel