Avatar billede thomaz Nybegynder
12. november 2000 - 03:49 Der er 17 kommentarer og
1 løsning

returneret array

Jeg har lavet følgende kode (er kun et udsnit af hele koden)

private String[]returDatabase = new String[4];// her er der et privat array, som befinder sig i klassen



public void addknapper()
{
// den følgende kode ligger i en action listener

JComboBox cb = (JComboBox)e.getSource();
String forspl = (String)cb.getSelectedItem();

(SimpleSearchsoegklienter = sql forespørgsel i min database)

SimpleSearchsoegklienter soeg = new SimpleSearchsoegklienter();

returDatabase  = soeg.search(forspl);
}
Mit problem er følgende at jeg får returneret et array i returDatabase, MEN hvordan får jeg fat i dette array (udenfor metoden)har prøvet at skrive returDatabase = returDatabase + soeg.search(forspl); men det virker ikke.

Hvis jeg i en metode f.eks returnerer arrayet returDatabase returnerer jeg kun null værdier og der er jo meningen jeg skal returnere mine værdier fra SQL  forespørgslen




Avatar billede ricki Nybegynder
12. november 2000 - 04:04 #1
Den tekst fatter jeg ikke meget af...
soeg.search(forspl); retunere et String array?
-og hvad er det du vil med den til?

Forstår jeg dig ret hvis forspl fx er \"ib\" så retunere search et String array med fx {\"tib\", \"ib\", \"fib\"}?

-hvad er dit spørgsmål?

Hvis soeg.search(forspl) retunere et String array kan jeg ikke se hvad dit problem er?
Avatar billede stringbuffer Nybegynder
12. november 2000 - 04:30 #2
Du kan ikke tildele et Array værdien af et andet array. Du bliver nødt til at kopiere indholdet med en løkke:

public void addknapper()
{
JComboBox cb = (JComboBox)e.getSource();
String forspl = (String)cb.getSelectedItem();

(SimpleSearchsoegklienter = sql forespørgsel i min database)

SimpleSearchsoegklienter soeg = new SimpleSearchsoegklienter();

String[] resultat = soeg.search(forspl);

for (int i=0; i < 4; i++)
  returDatabase[i]  = resultat[i];
}


Avatar billede stringbuffer Nybegynder
12. november 2000 - 04:38 #3
Java er et smukt sprog, ikke?
Avatar billede lbhansen Nybegynder
12. november 2000 - 10:14 #4
Du behøves ikke at kopiere hvert objekt i arrayet. Du kan sagtens lave en tildeling( det er jo ikke c det her ).
Avatar billede ricki Nybegynder
12. november 2000 - 11:12 #5
lbhansen har ret, man kan da sagtens tildele et array et andet array, bare de er af samme type, eller på en eller anden måde er i \"familie\" med hinanden gennem arv. Java arbejder jo udelukkende med pointere, ikke som C hvor der er en der har objektet og så nogle pointere til det.

Derfor kan jeg ikke helt forstå hvad problemet er her!?
Avatar billede codemon Nybegynder
12. november 2000 - 12:27 #6
Husk at arrays er objekter, hvis et array sættes lig med et andet (eller returneres eller overføres som parameter) vil de to arrays dele reference.
Ændres i det ene ændres også i det andet.
Avatar billede stringbuffer Nybegynder
12. november 2000 - 12:45 #7
ricki, så ser det umiddelbart ud som om returtypen på search IKKE er String[]
Avatar billede stringbuffer Nybegynder
12. november 2000 - 12:47 #8
Jep, codemon, det er vist oz det, der er meningen her :-)
Avatar billede thomaz Nybegynder
12. november 2000 - 13:32 #9
Ok jeg prøver lige af formulere mit spørgsmål noget bedre. I min metode får jeg returneret et array, indeholdende oplysninger(returDatabase) hvilket er OK men længere nede i min kode har jeg følgende metode:

public String[] getDatabase()
{
return returDatabase;
//returnerer null ???????
}
       
Fra et andet program/class kalder jeg metoden getDatabase og det er her problemet opstår idet jeg kun får returneret null værdier. Jeg returnerer åbentbart kun et \"tomt\" array. Jeg får ikke returneret de værdier jeg har hentet via min metode addKnapper()

Håber mit spørgsmål er blevet lidt mere forståeligt
Avatar billede ricki Nybegynder
12. november 2000 - 14:02 #10
så må der jo være en fejl i soeg.search() så den retunere null.
-Måske er det fordi den ikke finde noget der matcher forspørgslen?
Avatar billede dat00z22 Nybegynder
12. november 2000 - 14:43 #11
Prøv med

// et sted uden for din listner
private String[] array;


public void addknapper()
{
// den følgende kode ligger i en action listener

JComboBox cb = (JComboBox)e.getSource();
String forspl = (String)cb.getSelectedItem();

(SimpleSearchsoegklienter = sql forespørgsel i min database)

SimpleSearchsoegklienter soeg = new SimpleSearchsoegklienter();

array = soeg.search(forspl);
// nu skulle array udenfor metoden være = din forespørgelse
// hvis jeg har forstået dit spørgsmål rigtig. :-)
}
Avatar billede ricki Nybegynder
12. november 2000 - 15:23 #12
dat00z22>> det er ligemeget om array\'et har haft en værdi før den erstattes af en anden, så dette kan umuligt løse problemet.
Avatar billede thomaz Nybegynder
12. november 2000 - 17:21 #13
Dat00z22 du har forstået spørgsmålet korrekt, jeg har lige netop gjort som du skriver, jeg kalder bare mit array for returDatabase. Til info så har jeg lavet en system.out.println i metoden addknapper()og  JA jeg får værdier retur fra min SQL forespørgsel, så det er IKKE der problemet ligger. problemnt er at får overført mine værdier ud over min metode så andre programmer kan bruge disse værdier.
Avatar billede thomaz Nybegynder
12. november 2000 - 17:59 #14
Dat00z22 hvis jeg ikke helt tager fejl så går vi i klassen sammen Dat00z23(Thomas W). Som du nok ved så skal jeg bare have mit program til at virke til imorgen. Jeg mangler bare lige at få styr på mit returnerede array så er jeg færdig.
Avatar billede dat00z22 Nybegynder
12. november 2000 - 18:07 #15

så prøv at gøre den public
det er måske en fedtmule løsning, men så burde du kunne bruge indholdet af arrayet i andre filer ved at hente arrayet fra denne fil

Class DetteProg
public String[]returDatabase = new String[4];// her er der et privat array, som befinder sig i klassen

Class AndetProgram
{
bla bla bla
String[] etArray = DetteProg.returDatabase;
}


den mere rigtige metode er nok at holde arryet privat også lave en \"getDataMetode\" som fx:

Class DetteProg
private String[]returDatabase = new String[4];
public String[] getReturDatabase()
{
return returDatabase;
}

Class AndetProgram
{
bla bla bla
DetteProg data = new DetteProg();
String.etArray = data.getReturDatabase()
}

prøv om det virker, jeg har ikke afprøvet det selv! :-)
Avatar billede dat00z22 Nybegynder
12. november 2000 - 18:14 #16
Jamen der er da rigtig Thomas, jeg sider lige foran dig. :-)
Avatar billede stringbuffer Nybegynder
12. november 2000 - 19:34 #17
prøv evt. med

public String[] getDatabase()
{
String[] returArray = returDatabase;
return returArray;
}

Kunne det måske være at fordi et array altid er passed by reference, så vil du blot returnere en pointer til et private array, når du siger return returDatabase?
Avatar billede thomaz Nybegynder
16. november 2000 - 08:35 #18
løsningen dat00z22 fremlagde virkede. Og ja det er lidt af en fedtmule metode. Den rigtige måde er jo at lave en getmetode() :-)
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret

Capgemini Danmark A/S

SAP S/4HANA Business Controlling

Nextway Software A/S

Software Architect

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksteknikere til design, drift og vedligehold ved Cyberdivisionen