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..=)
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..=)
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..
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..
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.
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-
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);