View Full Version : array in java
octopus_71
03-12-2002, 16:20
ciao a tutti,
sapete se è possibile inizializzare solo parte di un array in java? cioé: dichiaro un array con di 1000 interi ed inizializzo esplicitamente solo i primi 100, un pò come si fa in C con l'istruzione: int array[1000] = {1,2,3,4,...,100}
grazie
ciao
No...il numero di elementi si può mettere solo creando una nuova istanza.
int[] array = new int[1000];
int[1000] array non è accettato dal compilatore...
octopus_71
03-12-2002, 16:52
tnx ma, a parte la sintassi, probabilmente mi sono espresso male.
la domanda è: una volta creato un array di 1000 elementi, posso con la sintassi {elem0, elem1,....elem99} (o in qualsiasi altro modo che non sia un ciclo o un assegnamento diretto - tipo a[0] = elem0; ecc) settare solo i primi 100?
No...e se hai voglia di leggere questo ti spiega il perchè...
Arrays in Java
Virtually all programming languages support arrays. Using arrays
in C and C++ is perilous because those arrays are only blocks of
memory. If a program accesses the array outside of its memory
block or uses the memory before initialization (common
programming errors) there will be unpredictable results.2
One of the primary goals of Java is safety, so many of the problems
that plague programmers in C and C++ are not repeated in Java. A
Java array is guaranteed to be initialized and cannot be accessed
outside of its range. The range checking comes at the price of having
a small amount of memory overhead on each array as well as
verifying the index at run time, but the assumption is that the safety
and increased productivity is worth the expense.
When you create an array of objects, you are really creating an array
of handles, and each of those handles is automatically initialized to
a special value with its own keyword: null. When Java sees null, it
recognizes that the handle in question isn’t pointing to an object.
You must assign an object to each handle before you use it, and if
you try to use a handle that’s still null, the problem will be reported
at run-time. Thus, typical array errors are prevented in Java.
You can also create an array of primitives. Again, the compiler
guarantees initialization because it zeroes the memory for that
array.
Arrays will be covered in detail in later chapters.
2 In C++ you should often use the safer containers in the Standard Template Library as an
alternative to arrays.
E comunque lecita una dichiarazione del tipo_
int[] array ={1,2,3,4}...in memoria viene creato un array di 4 celle...
Per creare array dinamici devi usare la classe Array
public final class Array
extends Object
The Array class provides static methods to dynamically create and access Java arrays.
Array permits widening conversions to occur during a get or set operation, but throws an IllegalArgumentException if a narrowing conversion would occur.
Originariamente inviato da cn73
[B]E comunque lecita una dichiarazione del tipo_
int[] array ={1,2,3,4}...in memoria viene creato un array di 4 celle...
Per creare array dinamici devi usare la classe Array
public final class Array
extends Object
The Array class provides static methods to dynamically create and access Java arrays.
Array permits widening conversions to occur during a get or set operation, but throws an IllegalArgumentException if a narrowing conversion would occur.
potrebbe usare i Vector che sono ancora meglio.
Se è per questo potrebbe anche crearsi una classe apposita...parlavamo di array...
Originariamente inviato da cn73
[B]Se è per questo potrebbe anche crearsi una classe apposita...parlavamo di array...
si ho capito :D pero' se c'e' qualcosa di meglio.. :rolleyes:
Originariamente inviato da Mazza2
[B]
si ho capito :D pero' se c'e' qualcosa di meglio.. :rolleyes: C'è sempre qualcosa di meglio... A ciascuno il suo...non ci sono + le mezze stagioni :D:D
octopus_71
04-12-2002, 12:30
grazie amici
mi sono intestardito ad utilizzare gli array perchè volevo fare un confronto fra un programma che ho scritto in C ed uno scritto in java in termini di velocità di esecuzione. lo so che non c'è storia, però volevo sperimentarlo, utilizzando le stesse strutture dati in entrambi i linguaggi. Conosco bene la classe Vector ma l'utilizzo è mooolto + pesante per la VM ed il confronto sarebbe non sarebbe stato ad armi pari.
grazie a tutti
Originariamente inviato da cn73
[B]C'è sempre qualcosa di meglio... A ciascuno il suo...non ci sono + le mezze stagioni :D:D
si stava meglio quando si stava peggio :D
Il C è meglio del Java :D:D
Originariamente inviato da octopus_71
[B]mi sono intestardito ad utilizzare gli array perchè volevo fare un confronto fra un programma che ho scritto in C ed uno scritto in java in termini di velocità di esecuzione. lo so che non c'è storia, però volevo sperimentarlo, utilizzando le stesse strutture dati in entrambi i linguaggi. Conosco bene la classe Vector ma l'utilizzo è mooolto + pesante per la VM ed il confronto sarebbe non sarebbe stato ad armi pari.
Con il C non credo ci sia storia... Magari sarebe interessante fare un confronto con il C++ usando la classe Vector anche in C++ ;)
Prova a fare un semplice algoritmo per la moltiplicazione riga-colonna di due matrici di float 1000 per 1000 (inizializzate casualmente)...poi a tradurlo in C++ ci penso io :)
import java.util.Random;
import java.util.Date;
class TryThis {
public static void main(String[] arg) {
Date start,end;
int elements=1000;
Random random=new Random(new Date().getTime());
float[][] f1=new float[elements][elements];
float[][] f2=new float[elements][elements];
float[][] ff=new float[elements][elements];
//inizializza le matrici
for(int i=0;i<elements;i++) {
for(int j=0;j<elements;j++) {
f1[i][j]=random.nextFloat();
f2[i][j]=random.nextFloat();
}
}
//matrici inizializzate
//inizio del calcolo del prodotto di matrici
System.out.println((start=new Date()));
for(int i=0;i<elements;i++) {
for(int j=0;j<elements;j++) {
float sum=0f;
for(int z=0;z<elements;z++) {
sum+=f1[i][z]*f2[z][j];
}
ff[i][j]=sum;
}
}
System.out.println((end=new Date())+"\nEnd of process\n");
//fine
long millisecs=end.getTime()-start.getTime();
int seconds=(int)(millisecs/1000);
int minutes=seconds/60;
seconds=seconds-minutes*60;
int msec=(int)millisecs-(seconds+minutes*60)*1000;
System.out.println(
"Time elapsed: "+minutes+" min "+seconds+" sec "+msec+" ms");
System.exit(0);
}
}
1 minuto 7 secondi circa, con un Athlon 1200 (per il solo calcolo del prodotto tra matrici)
So che Java è più lento di C/C++, ma sono curioso di sapere di quanto!
[x Cionci]
Potresti fare una traduzione pari pari in C++ e vedere cosa salta fuori?
Ciao.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.