Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19

    Operazione su 3 vettori

    Buongiorno, volevo creare un programma che dati 3 : v1,v2,v3. Restituisce un vettore contenente tutti e solo gli elementi di v1 che sono presenti almeno due volte in v2 e non più di due volte in v3.
    Esempio : v1=(4,5) v2=(4,6,4,4) v3=(5,2,4)
    Ovviamente il vettore finale sarà : V=(4) .
    Ho provato a farlo ma mi da un errore non capisco cosa sia,potete darmi una mano? :
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at esempio2.filtra(esempio2.java:19)
    at esempio2.main(esempio2.java:7)

    codice:
    public class esempio2{     public static void main(String[]args){
         
         	   int v1[]={4,5,6,7,9};	
               int v2[]={4,10,6,7,12,4,6,9};
               int v3[]={4,6,10,6,6};
                int V[]=filtra(v1,v2,v3);
                for(int i=0;i<V.length;i++)
                    System.out.println(V[i]+"|");
         }
         
         
           public static int[] filtra(int[]v1, int[]v2, int[]v3){
                   int dimvett=0;   
                 for(int i=0;i<v1.length;i++){
                      int cont1=trova1(v1[i],v2);
                      int cont2=trova2(cont1,v3);   
                         if(cont1==cont2 && cont1!=0){
                               dimvett++;
                         }        
                 }
                  int[]vett=new int[dimvett];  int pos=0;
                      for(int i=0;i<v1.length;i++){
                         int cont1=trova1(v1[i],v2);
                         int cont2=trova2(cont1,v3);   
                             if(cont1==cont2 && cont1!=0){
                                 vett[pos]=cont1;
                                 pos++;
                             }        
                      }
                 
                 return vett;
                 
           }
           
           public static int trova1(int num, int[]v2){
              int cont=0;   int val=0;
                for(int i=0;i<v2.length;i++){
                     if(num==v2[i]){
                      cont++;  
                       if(cont==2){
                          val=num; 
                          return val;
                       }
                     }
                }
                return val;
           }          
                     
           public static int trova2(int num, int[]v3){
              int cont=0;   int val;
                for(int i=0;i<v3.length;i++){
                   if(num==v3[i]){
                      cont++;  
                    }
                }     
                     if(cont<=2)
                        val=num;
                     else
                       val=0;
                       
                    return val;   
                     
                     
           }          
           
     }

    Grazie mille!!
    Ultima modifica di Mark_7; 10-06-2014 a 14:03

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Guarda la prima riga del metodo "filtra()":


    codice:
    int dimvett=0; int[]vett=new int[dimvett];

    In pratica, stai creando un array (vett) di 0 elementi... un array di 0 elementi non può, ovviamente, contenere alcun elemento... quindi alla riga 19 quando fai:


    codice:
    vett[dimvett] = cont1;

    stai "sforando" l'array... che, ripeto, non può contenere nessun elemento (quindi, nemmeno l'elemento in posizione 0).

    Devi rivedere (almeno) l'istanziazione di quell'array. Tutto il resto del codice non l'ho guardato.


    PS: ArrayIndexOutOfBoundsException è un'eccezione piuttosto comune: significa sempre che stai sforando un array (o per un indice troppo grande o per un indice troppo piccolo), quindi è "facile" capire cosa cercare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    19
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Guarda la prima riga del metodo "filtra()":


    codice:
    int dimvett=0; int[]vett=new int[dimvett];

    In pratica, stai creando un array (vett) di 0 elementi... un array di 0 elementi non può, ovviamente, contenere alcun elemento... quindi alla riga 19 quando fai:


    codice:
    vett[dimvett] = cont1;

    stai "sforando" l'array... che, ripeto, non può contenere nessun elemento (quindi, nemmeno l'elemento in posizione 0).

    Devi rivedere (almeno) l'istanziazione di quell'array. Tutto il resto del codice non l'ho guardato.


    PS: ArrayIndexOutOfBoundsException è un'eccezione piuttosto comune: significa sempre che stai sforando un array (o per un indice troppo grande o per un indice troppo piccolo), quindi è "facile" capire cosa cercare.


    Ciao.
    Avevi proprio ragione,ho risolto. Ho aggiornato il codice. Grazie mille!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.