|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2001
Città: Cagliari
Messaggi: 48
|
array in java
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
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... |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jun 2001
Città: Cagliari
Messaggi: 48
|
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? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
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. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
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. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Se è per questo potrebbe anche crearsi una classe apposita...parlavamo di array...
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jun 2001
Città: Cagliari
Messaggi: 48
|
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 |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
|
Quote:
si stava meglio quando si stava peggio ![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Il C è meglio del Java
![]() ![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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
![]() |
![]() |
![]() |
![]() |
#15 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Pronto per provare!
Codice:
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); } } 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. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:57.