ongelma javassa

JAVA!!!

Jos saan parametrinä luvun 5 miten saan sen taulukon alkioiden määräksi.

Saan vain 1 alkion joka sisältää 5 numeron..:(

Kiitos jo etukäteen avusta..=)
6401
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

hiukki epäselvä, mutta.. ilmeisesti parametri tulee jostain muualta ja se on string tyyppiä? tee sille tyyppimuunnos int:ksi ja alusta sen kokoinen taulukko.

voisit selittää hiukan öö paremmin, niin palataa astialle..

Äänestä
  • Elikä kyseinen parametri tulee ohjelmaa käynnistäessä......esim. JAVA TAULU 5 ja taulua ei voi alustaa koska en tiedä kuinka suuri siitä tulee tyyppi muunnoksen olen tehnyt..

    Äänestä

  • juh kirjoitti:

    Elikä kyseinen parametri tulee ohjelmaa käynnistäessä......esim. JAVA TAULU 5 ja taulua ei voi alustaa koska en tiedä kuinka suuri siitä tulee tyyppi muunnoksen olen tehnyt..

    no onko toi 5 sen taulun koko?
    Javassa voi taulukon koon määrittää suorituksen aikana, mutta sitä ei voi pienentää enää sitten..

    parempi ja dynaamisempi ratkaisu on vektorit, joita voi sekä kasvattaa, että pienentää ajon aikana.

    tutustu java.util.Vector luokkaan osoitteessa java.sun.com siellä on muutenkin kaikki dokumentaatiot..

    Äänestä

Tarkotat varmaa että haluat alustaa taulukon dynaamisesti. Eli siis taulukon koko päätetään vasta ohjelman ajon aikana.

En ole javaa pahemmin käyttänyt mutta koita "Vector" luokkaa.

Äänestä

Mulla oli kanssa joskus tarvetta jonkun taulukon koon kasvattamiseen ja tein silloin tollasen luokan, jolla homma hoituu suht iisisti:

package common;
import java.lang.reflect.*;

public class ReDim
{
public static Object addElements(Object source, int elements)
{
int sourceLength = Array.getLength(source);
Class arrayClass = source.getClass();
Class componentClass = arrayClass.getComponentType();
Object result = Array.newInstance(componentClass, sourceLength elements);
System.arraycopy(source, 0, result, 0, sourceLength);
return result;
}
}

Muista, että tuota luokkaa voi käyttää minkä tahansa taulukon kanssa, joten se pitää aina castata oikeaan muotoon:

import common.*;
...
String sArray[] = new String[0];
...
sArray = (String[]) ReDim.addElements(sArray, 5);
...

Voi muuten hyvin olla, että saman asian tekemiseen löytyy uudemmasta API:sta ns. standardi-ratkaisu, mutta sitä en jaksanut alkaa tässä yhteydessä etsiskelemään etenkin, kun tuo toimii aivan yhtä hyvin.

-Jonttu-

Äänestä

Tässäpä luokka jolla voi veivata talukon kokoa dyynamisesti ajon aikana.Ja edelleen taulukon alkioita voi käsitellä indeksin avulla tavallisen tapaan.



import java.util.*;
import java.lang.reflect.*;
import java.lang.reflect.Array;

/**************************************************************************
--------------------------------------------------------------------------
*          class MyArray
*
* Apuluokka, jolla voi kasvattaa mitä vain tyyppiä olevaa taulukkoa
* n:llä alkiolla. Kyseessä on samantyyppinen toiminto, joka on valmiiksi
* ohjelmoitu collections-paketin Vektor luokkaan.
*
* Lisäksi muita vastaavia metodeita, jotka jäljittelee vektorin toimintoja.
*
------------------------------------------------------------------------
***********************************************************************/

class MyArray
{
// kasvata taulukkoa halutulla määrällä (varaa lisää tilaa maara)

public static Object grow(Object a, int maara)
{ Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = a.getClass().getComponentType();
int length = Array.getLength(a);
int newLength = length maara;

Object newArray = Array.newInstance(componentType,
newLength);
System.arraycopy(a, 0, newArray, 0, length);
return newArray;
}

/****************************************************************
// lisää taulukon haluttuun kohtaan alkio, sekä varaa lisää tilaa
// yhdelle alkiolle
*****************************************************************/

public static Object add(Object a, int indeksi, Object o)

{ Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = a.getClass().getComponentType();
int length = Array.getLength(a);
int newLength = length 1;

Object newArray = Array.newInstance(componentType,
newLength);
// alkuosa alkio loppuosa
System.arraycopy(a, 0, newArray, 0, indeksi);
Array.set(newArray, indeksi, o);
//if (indeksi != length)
System.arraycopy(a, indeksi, newArray, indeksi 1, length-indeksi);

return newArray;
}

/****************************************************************
// poista taulukon haluttu alkio, ja pienennä tilanvarausta yhdellä
****************************************************************/

public static Object remove(Object a, int indeksi)
{ Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = a.getClass().getComponentType();
int length = Array.getLength(a);
int newLength = length - 1;
Object newArray = Array.newInstance(componentType,
newLength);
// alkuosa alkio loppuosa
System.arraycopy(a, 0, newArray, 0, indeksi);
System.arraycopy(a, indeksi 1, newArray, indeksi, length-indeksi-1);

return newArray;
}
/********************************************************************
// aseta taulukon koko täsmälleen halutun kokoiseksi. Ylimeneviä
// elementtejä ei sisällytetä/ loppuun voi jäädä tyhjääkin.
*******************************************************************/

public static Object setSize(Object a, int size)
{ Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = a.getClass().getComponentType();
int length = Array.getLength(a);
int newLength = size;

Object newArray = Array.newInstance(componentType,
newLength);
System.arraycopy(a, 0, newArray, 0, newLength);
return newArray;
}

/******************************************************************
// tee taulukosta 'sopivan' kokoinen, lopun nolla-alkiot poistetaan ja
// niiden tilanvaraus.(Tarviskohan etuosaan saman... ??)
******************************************************************/

public static Object trimToSize(Object a)
{ Class cl = a.getClass();
if (!cl.isArray()) return null;
Class componentType = a.getClass().getComponentType();
int length = Array.getLength(a);
int newLength = length;
// missä on nollia
for (int i=length; i>0; i--)
{
if ( Array.get(a, i-1) == null)
newLength = i;
// jos lähdetty liikkeelle, pitää poistaa vikakin, joka oli null
else
{
newLength = i;
break;
}
}
Object newArray = Array.newInstance(componentType,
newLength);
System.arraycopy(a, 0, newArray, 0, newLength);
return newArray;
}

}




---------------------------------



KÄYTTÖ

ESIM 1.

   // kopioi stringi merkkitaulukoksi käsittelyn ajaksi

   char[] sarray = new char[5000];
   s.getChars(0, s.length(), sarray, 0);
   sarray = (char[])MyArray.trimToSize(sarray);
   


ESIM 2.
// kun Oliotaulukko ahdistaa, suurenna 50:llä
me = (Menot[])MyArray.grow(me, 50);

// kun valmis, tee koosta jämpti
me = (Menot[])MyArray.trimToSize(me);

// lisää lopuun yksi nolla-alkio
me = (Menot[])MyArray.add(me, alkioita, null);

Äänestä

Kommentoi aloitusta


Auttakaa kirjoitti:

JAVA!!!

Jos saan parametrinä luvun 5 miten saan sen taulukon alkioiden määräksi.

Saan vain 1 alkion joka sisältää 5 numeron..:(

Kiitos jo etukäteen avusta..=)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu