Avatar billede altinak Nybegynder
14. oktober 2005 - 11:41 Der er 29 kommentarer og
1 løsning

ArrayList til Array

Hej eksperter!

Jeg har et tilsyneladende enkelt problem. Jeg skal have lavet et ArrayList om til et string array. Enkelt, man bruger bare toArray! Men af en eller anden grund for jeg ikke noget brugbart returneret. Her er et uddrag af koden:

ArrayList kategorier=kontantSalgHandler.enterMærke(maerke);
                                System.out.println("KontantSalg01 kategorier: "+kategorier);
                                String[] array = new String[kategorier.size()];
                                kategorier.toArray(array);
                                System.out.println("List to Array: " + array);

Og her er hvad jeg får ud af det:

KontantSalg01 kategorier: [Vælg Kategori, Lastbil]
List to Array: [Ljava.lang.String;@14f8dab

Som man kan se indeholder ArrayListen kategorier tekst, men hvorfor kan jeg ikke få konverteret det om til et string array? Er der evt. nogen der har et forslag til, hvordan man opretter sin egen toArray-metode?
Avatar billede kalp Novice
14. oktober 2005 - 11:47 #1
array = kategorier.toArray();
Avatar billede kalp Novice
14. oktober 2005 - 11:47 #2
uden lige at slå det op.. men kunne sådan ud:)
Avatar billede kalp Novice
14. oktober 2005 - 11:49 #3
array = kategorier.toArray(array);

men tror på det første
Avatar billede altinak Nybegynder
14. oktober 2005 - 11:50 #4
Så får jeg "Type mismatch: cannot convert from Object[] to String[]"
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 11:52 #5
array = kategorier.toArray(String);
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 11:53 #6
array = (String[])kategorier.toArray(String);
Avatar billede altinak Nybegynder
14. oktober 2005 - 11:54 #7
Hvis jeg bruger dit andet forslag således: array = (String[]) kategorier.toArray(array);, er jeg tilbage ved det oprindelig problem, hvor indeholded af string array'et bliver noget lig [Ljava.lang.String;@14f8dab.
Avatar billede kalp Novice
14. oktober 2005 - 11:55 #8
er der en tostring i maerke ?
Avatar billede altinak Nybegynder
14. oktober 2005 - 11:56 #9
erikjacobsen, dit forslag resulterer i "String cannot be resolved"
Avatar billede altinak Nybegynder
14. oktober 2005 - 11:57 #10
Ja, det er der. I kan lige få lidt mere kode:

String maerke = VælgMærke.getSelectedItem().toString();                               
                                System.out.println(maerke);
                                maerke=maerke.trim();
                                ArrayList kategorier=kontantSalgHandler.enterMærke(maerke);
                                System.out.println("KontantSalg01 kategorier: "+kategorier);
                                String[] array = new String[kategorier.size()];
                                array = (String[]) kategorier.toArray(String);
                                System.out.println("List to Array: " + array);
                                getVælgKategori().addItem(array);

Det er til en ComboBox.
Avatar billede kalp Novice
14. oktober 2005 - 12:02 #11
System.out.println("List to Array: " + array);


hvis det er her den udskriver det så er det fordi du skal gennemløbe din array i en løkke;)
Avatar billede jakoba Nybegynder
14. oktober 2005 - 12:05 #12
output fra toArray er et Object[] det kan ikke rigtig være anderledes. for at lave et String[] må du flytte de Object'er der er i din arraylist eet ad gangen med en cast
enten
  Object[] nytArray = kategorier.toArray();
eller
  String[] nytArray = new String[kategorier.size()];
  for(int i=0; i<nytArray.length; i++) {
    nytArray[i] = (String)kategorier.get(i);
  }
Avatar billede altinak Nybegynder
14. oktober 2005 - 12:06 #13
Jeg tror du er inde på noget af det rigtige. Skal lige afprøves. :)
Avatar billede kalp Novice
14. oktober 2005 - 12:08 #14
System.out.println("List to Array: " + array);
                   
til

System.out.println("List to Array: ");             
for(int i = 0; i < array.length; i++)
{             
System.out.print(array[i])
}

var min idé
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 12:14 #15
Ja, jeg huskede lige forkert. Prøv

array = (String[])kategorier.toArray(typeof(String));
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 12:18 #16
Og hvis vi så lige skal ha' den i Java :)



array = (String[])kategorier.toArray (new String[0]);



Der er mig bekendt ikke en typeof i Java...
Avatar billede kalp Novice
14. oktober 2005 - 12:20 #17
:O)
Avatar billede erikjacobsen Ekspert
14. oktober 2005 - 12:20 #18
Åh, ja, tak. Det var vist C# ;)
Pointen er at det kan gøres i een linie.
Avatar billede altinak Nybegynder
14. oktober 2005 - 13:06 #19
ved at bruge kalps og mikkelbms eksempler, kan jeg få arrayet printet ordentligt ud. Så vidt så godt! Men hvordan kan jeg få det til at stå i en comboBox? Jakoba's forslag er umiddelbart vejen frem, men resultatet bliver en IndexOutOfBoundsException! :(
Avatar billede kalp Novice
14. oktober 2005 - 13:11 #20
hvis du har brugt hans kode direkte som den står her

  String[] nytArray = new String[kategorier.size()];
  for(int i=0; i<nytArray.length; i++) {
    nytArray[i] = (String)kategorier.get(i);
  }

så tror jeg det virker sådan her

  String[] nytArray = new String[kategorier.size()];
  for(int i=0; i<nytArray.length-1; i++) {
    nytArray[i] = (String)kategorier.get(i);
  }
Avatar billede altinak Nybegynder
14. oktober 2005 - 13:18 #21
Det var dog utroligt! Nu slipper jeg for OutOfBoundsException, men sidder tilbage med det samme problem: comboBox'en indeholder "[Ljava.lang.String;@14f8dab"... Andre forslag?
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 13:21 #22
Hvordan fylder du dit array i din combobox?

Det kunne godt se ud som om du fylder hele arrayet ind som ét element.
Avatar billede kalp Novice
14. oktober 2005 - 13:23 #23
JComboBox minBoks = new JComboBox(array);

burde være det rigtige
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 13:25 #24
Et hurtigt lille eksempel:

import java.util.*;
import java.awt.*;
import javax.swing.*;

public class TestArray extends JFrame
{
    private JComboBox combo;

    public TestArray ()
    {
        setSize (400, 400);
        combo = new JComboBox (generateArray());

        this.getContentPane().add (combo, BorderLayout.NORTH);
    }

    private String[] generateArray ()
    {
        ArrayList list = new ArrayList ();
        list.add ("Hej");
        list.add ("Med");
        list.add ("Dig");

        String[] array = (String[])list.toArray (new String[0]);

        return array;
    }

    public static void main (String[] args)
    {
        new TestArray ().setVisible (true);
    }
}
Avatar billede altinak Nybegynder
14. oktober 2005 - 13:37 #25
Tror det er på tide at fortælle lidt mere om systemet. Først får I lige hele comboBoxen:

private javax.swing.JComboBox getVælgMærke() {
        if(VælgMærke == null) {
            System.out.println("itIs.outList1: "+itIs.outList1());
            ArrayList arrayList1 = itIs.outList1();
           
            String[] array1 = new String[arrayList1.size()];
            arrayList1.toArray(array1);           
            VælgMærke = new javax.swing.JComboBox(array1);
            VælgMærke.setName("");
            VælgMærke.addItemListener(
                new ItemListener() {
                        public void itemStateChanged(java.awt.event.ItemEvent event) {
                            if( event.getStateChange() == ItemEvent.SELECTED){
                               
                                String maerke = VælgMærke.getSelectedItem().toString();                               
                                System.out.println(maerke);
                                maerke=maerke.trim();
                                ArrayList kategorier=kontantSalgHandler.enterMærke(maerke);
                                System.out.println("KontantSalg01 kategorier: "+kategorier);
                                String[] array = new String[kategorier.size()];
                                array = (String[])kategorier.toArray (new String[0]);
                                //String[] nytArray = new String[kategorier.size()];
                                  for(int i=0; i<array.length; i++) {
                                    array[i] = (String)kategorier.get(i);
                                  }
                               
                                System.out.println("List to Array: ");
                                for(int i = 0; i < array.length; i++)
                                    {
                                    System.out.println(array[i]);
                                    }
                               
                                //System.out.println("List to Array: " + array);
                                getVælgKategori().addItem(array);
                            }                           
                        }
            });                   
        }
        return VælgMærke;
    }

Jeg har flere comboBox'e, hvor indholdet i den anden comboBox skal reflektere et valg foretaget i den første comboBox. Den første comboBox virker fint nok. Men når jeg vælger noget fra listen i den første comboBox, får jeg teksten "[Ljava.lang.String;@14f8dab" (eller lignende) i den næste comboBox. Navnet på den anden comboBox er "getVælgMærke", og som I kan se nederst i koden bruger jeg "getVælgKategori().addItem(array) til at tilføje informationerne til den næste comboBox. Dette er noget jeg har forsøgt mig frem til, og det er måske ikke den rigtige metode? Måske det er her problemet ligger?
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 14:18 #26
getVælgKategori().addItem(array);

Tilføjer dit array-objekt til din combobox og ikke hvert enkelt element.

Prøv i stedet:

JComboBox combo = getVælgKategori();

for (int i = 0; i < array.length; i++)
    combo.addItem (array[i]);


Så vil jeg tro det virker...
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 14:19 #27
For et par dage siden svarede jeg på et spørgsmål, der ligner dette til forveksling. Prøv at kigge på mit svar:

http://eksperten.dk/spm/655565
Avatar billede altinak Nybegynder
16. oktober 2005 - 17:53 #28
Ja, weekenden kom på et ubelejligt tidspunkt, så jeg har ikke fået kigget ordentligt på dit eksempel. I mellemtiden har en anden fra min projekt-gruppe fundet frem til en anden løsning, som vi så vil bruge. Men jeg vil da gerne belønne dig for din hjælp, some jeg er sikker på andre også kan få glæde af, så hvis du lige vil lægge et svar, er pointene dine. :)
Avatar billede mikkelbm Nybegynder
16. oktober 2005 - 17:54 #29
Jeg går ud fra at du taler til mig :)

?
Avatar billede altinak Nybegynder
16. oktober 2005 - 22:06 #30
Det er helt korrekt. :)
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