Avatar billede nanders Nybegynder
11. september 2003 - 09:10 Der er 19 kommentarer og
1 løsning

Array's

Kære eksperter,

Jeg har lavet et edb-program hvori jeg nu vil gemme nogle data til udskrivning i eksempelvis Microsoft's Excel.

Jeg ønsker at gemme data i Array's - dvs. at jeg har skrevet:

import java.util.ArrayList; øverst i programstumpen.

Det lader imidlertid at gå galt i følgende initialiserng (?) af arrayet:

        int num = 1500;
        ApH_1 = new ArrayList();
        double[] ApH_1 = new double[num];

(compileren sætter et mærke ved anden linje)

Senere går det galt, når jeg inde i en løkke vil:

      ApH_1.add(pH_1);

Note: Jeg erklærer min klasse med:

public class ModelJava110 extends javax.swing.JComponent

Jeg ved ikke om det kan have en betydning.

Med venlig hilsen

nanders
Avatar billede riversen Nybegynder
11. september 2003 - 09:17 #1
først sætter du ApH_1 = new ArrayList() og så  laver du double[] ApH_1 = new double[num];...

et double array har ingen add metode
Avatar billede nanders Nybegynder
11. september 2003 - 09:23 #2
Hej Riversen,

Linjen: ApH_1.add(pH_1); vil compileren slet ikke acceptere.

Den "cannot resolve symbol" ApH_1 og "symbol: method and (double)"

Hvordan lægger jeg så automatisk noget ind i et array der kan indeholde double ?
Avatar billede riversen Nybegynder
11. september 2003 - 09:25 #3
du kan slette: double[] ApH_1 = new double[num];

og så sige ApH_1.add( new Double( 3.90232 ) );
Avatar billede Slettet bruger
11. september 2003 - 09:27 #4
Du skal først fortælle compileren hvilken type dine variable er (erklære dem), inden du kan assigne til dem.
Du har ikke erklæret "ApH_1" inden linjen "ApH_1 = new ArrayList();", hvilket medfører at compileren genererer en "cannot resolve symbol" error.

Så hvis du ikke har erkæret arraylisten tidligere, er mit gæt at det er den fejl du får?

Det kan afhjælpes ved at sige "ArrayList ApH_1 = new ArrayList()".

Nu får du tilgengæld problemer med den sidste linje "double[] ApH_1 = new double[num];" idet "ApH_1" her bliver generklæret som typen "double[]". Når du først en gang har fortælt compileren hvilken type en variabel er, kan du ikke generklærer den senere i samme "scope". Hvis du vil benytte "ArrayList" skal du i stedet lave dine doubles om til double objekter når du sætter ind i arrayet, og omvendt når du tager dem ud.

Her er et eksempel:

ArrayList ApH_1 = new ArrayList();
ApH_1.add(new Double(5.3));
System.out.println(((Double) ApH_1.get(0)).doubleValue());
Avatar billede nanders Nybegynder
11. september 2003 - 09:28 #5
Den vil slet ikke acceptere min initialisering af arrayet.


        ApH_1 = new ArrayList(); forstår den ikke.
Avatar billede riversen Nybegynder
11. september 2003 - 09:29 #6
gør som jjust har skrevet ArrayList ApH_1 = new ArrayList();
Avatar billede arne_v Ekspert
11. september 2003 - 09:30 #7
Lyder som om ApH_1 ikker er erklæret.

ArrayList ApH_1 = new ArrayList();
Avatar billede nanders Nybegynder
11. september 2003 - 09:32 #8
Hej jjust

Compileren accepterer:

ArrayList ApH_1 = new ArrayList();

Men mit array skal kunne indeholde 1500 double.

Compileren vil ikke acceptere:

ApH_1.add((double)pH_1);
Avatar billede Slettet bruger
11. september 2003 - 09:34 #9
ArrayList er holder automatisk styr på at udvide og mindske størrelsen alt efter hvor mange elmenter du sætter i den.

Du kan ikke caste til et Double Object. Du bliver nødt til at oprette en ny instans med "new Double(3.4)". Se eksemplet.
Avatar billede riversen Nybegynder
11. september 2003 - 09:34 #10
du skal bruge et Double object...dvs. new Double( 5.646546 )

hvordan ser pH_1 ud der hvor du erklærer den
Avatar billede Slettet bruger
11. september 2003 - 09:37 #11
I java er simple typer som f.eks. char, int, long, double... ikke objekter. ArrayList's add metode tager et objekt som argument. Objekt er en klasse som alle andre klasser i jave nedarver fra. Java api'en giver dig mulighed for at "wrappe" simple typer i objekter. Dette gøres ved et oprette nye instanser af f.eks. "Character", "Integer", "Long" og "Double". Disse indeholder så igen metoder til at få den oprindelige værdi ud af objekterne, som f.eks. metoden doubleValue() jeg benytter i eksemplet.
Avatar billede nanders Nybegynder
11. september 2003 - 09:38 #12
Hej jjust

pH_1 er en double i omegnen af værdien 7.

pH_1 = -(Math.log(H_1) / Math.log(10)); (som virker)

Jeg kan ikke nøjes med at sætte et tal ind - det er nødt til at være en variabel af typen double.

ApH_1.add(new double(pH_1)); vil compileren ikke acceptere.
Avatar billede Slettet bruger
11. september 2003 - 09:38 #13
Bemærk forøvrigt at java er case-sensitive, dvs. store og små bogstaver har betydning. Der er forskel på double og Double.
Avatar billede Slettet bruger
11. september 2003 - 09:43 #14
Det burde virke, jvf. at mit eksempel ovenover compiler og kører.

Kan du evt. poste din kode. Eller plukke den del ud der ikke virker.

Det er også en double du sætter ind. Den er bare gemt ind i et Double Objekt.
Avatar billede nanders Nybegynder
11. september 2003 - 09:46 #15
Hej jjust

Nu compiler den på lystigt på:

int num = 1500;
ArrayList ApH_1 = new ArrayList(num);
ApH_1.add(new Double(pH_1)); 

Da jeg erklærerede alle mine variable var det med double (lille d)

Hvis jeg skal have data ud igen, skal jeg så skrive f.eks.:

for (int i=0, i<10, i++)

System.out.println(((Double) ApH_1.get(i)).doubleValue()); (?)
Avatar billede nanders Nybegynder
11. september 2003 - 09:52 #16
Jeg må vist også  hellere få givet dig pointsene.
Avatar billede Slettet bruger
11. september 2003 - 09:55 #17
Ja, du kan gøre som ovenstående.

I stedet for "for (int i=0, i<10, i++)" kan du bruge "for (int i=0, i<ApH_1.size(), i++)
"

double myDouble = ((Double) ApH_1.get(i)).doubleValue();
Avatar billede arne_v Ekspert
11. september 2003 - 09:56 #18
Må jeg have lov til at foreslå nogle semikolonner i.s.f. kommaer i de
for løkker ?

:-)
Avatar billede nanders Nybegynder
11. september 2003 - 10:00 #19
Hej Arne,

Tak for kommentaren som naturligvis er rigtig.

Også tak for din hjælp i søndags.

Det viste sig, som du også foreslog, at det var mit filsystem der var noget galt med. På Universitetets Unix-computere kørte det helt uden problemer og jeg fik lavet det hele på 20 minutter.

mvh

nanders
Avatar billede Slettet bruger
11. september 2003 - 10:06 #20
arne v: Du har nok ret i at compileren har bedre af ";" end "," :-)
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