Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 03-05-2006, 17.14.13   #1
Lorenzo3
Senior Member
 
Registrato: 01-03-2006
Messaggi: 249
Lorenzo3 promette bene
[Java]Programmino livello universitario

Roba di un corso del primo anno, nulla di che: bisogna fare una function (mulVett) che dato un vettore e un paramentro intero (d), restituisca un altro vettore contenente gli elementi di quello iniziale che sono in posizioni multiple di d.

int[] mulVett(int vettore[], int d){
int[] vett2 = new int[vettore.length/d];
int j = 0;
for (int i = 0; i < vettore.length - d; i+=d){
vett2[j] = vettore[i];
j++;
}

main:

int l = 10, n = 3;
int vet[] = new int[l];

for (int i = 0; i < vet.length; i++){
vet[i] = 1 + (int)(Math.random()*100);
System.out.print(vet[i] + " ");
}

System.out.print("\n");

int res[] = mulVett(vet, n);

for (int i = 0; i < res.length; i++){
System.out.print(res[i] + " ");
}

Ecco io vorrei sapere perchè, se lo lascio così, del vettore risultato non mi stampa l'ultimo elemento, mentre se levo quel "- d" nella condizione d'arresto del ciclo for all'interno di mulVett mi da una ArrayIndexOutOfBoundsException...

Grazie a chi ha qualche suggerimento.
___________________________________

1 + 1 = 3, for large values of 1.
Lorenzo3 non è collegato   Rispondi citando
Vecchio 03-05-2006, 20.32.30   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
L'errore sta nella dimensione del vettore da restituire (btw: manca il return nel metodo, eh ): in questo caso, con le conversioni del caso, risulta 10/3 = 3, mentre a te servono quattro posti (0, 3, 6, 10).

La cosa è gestibile, senza ricorrere a funzioni ulteriori, così:

Codice:
lunghezza = vettore.length/d;
if ((vettore.length % d) != 0)
   lunghezza += 1;

int[] vett2 = new int[lunghezza]
poichè la divisione di un int per un int ti dà in sostanza il floor del rapporto fra i due operandi.
Si può anche far così:

Codice:
int[] vett2 = new int[(int)Math.ceil((double)7/(double)3))]
o in mille altri modi


In sostanza, non avendo correttamente dimensionato l'array, se ti fermavi un ciclo prima tutto ok (ma ti mancava l'ultimo elemento), se invece analizzavi tutto l'array di partenza andavi in ArrayIndeXOutOfBound per l'array destinazione, in quanto cercavi di scrivere in una posizione non allocata.

Per il resto è ok

Ultima modifica di Dav82 : 03-05-2006 alle ore 20.42.19
Dav82 non è collegato   Rispondi citando
Vecchio 03-05-2006, 21.34.56   #3
Lorenzo3
Senior Member
 
Registrato: 01-03-2006
Messaggi: 249
Lorenzo3 promette bene
Già, la posizione zero!! Eroore scemo. Grazie per il consiglio
___________________________________

1 + 1 = 3, for large values of 1.
Lorenzo3 non è collegato   Rispondi citando
Vecchio 03-05-2006, 21.41.04   #4
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Poi dipende tutto dalla specifica eh

Dipende se il primo elemento dell'array lo consideri (a livello logico) come in posizione zero o in posizione uno... tutto lì
Dav82 non è collegato   Rispondi citando
Vecchio 03-05-2006, 22.10.12   #5
Lorenzo3
Senior Member
 
Registrato: 01-03-2006
Messaggi: 249
Lorenzo3 promette bene
No bisognava partire da 0, sennò in effetti l'avrei dimensionato bene.
___________________________________

1 + 1 = 3, for large values of 1.
Lorenzo3 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Orario GMT +2. Ora sono le: 20.08.27.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.