Metodo per rimozione elemento array

di il
9 risposte

Metodo per rimozione elemento array

Devo scrivere metodo staticov rimuovi(int v, int[] in) che restituisce un nuovo array con gli interi presenti nell'array passato come argomento, ma con
il valore v rimosso, per esempio se v è 3 e contiene 0,1,2,3,0,3,1 il metodo restituirà un array contenente 0,1,2,0,1

ho avuto diversi problemi a riguardo, in quanto in output non da nulla..

public class Array_method {

    public static boolean rimuovi(int v, int[] in) {
      boolean finito = false;
     int contatore = 0;
     
     while(!finito) {
          if(v!= contatore) {
             contatore =v;
             in[v] = contatore;
         } 
    
        }
     return false;
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
        //Scanner scan=new Scanner(System.in);
        System.out.println("dimensione array");
       
        int[] a = new int[]{0,1,1,2,3,3,0,3,1};
        int[] b = new int[a.length];
        rimuovi(3,b);
        
        
    }   
}

9 Risposte

  • Re: Metodo per rimozione elemento array

    KernelPanic ha scritto:


    Devo scrivere metodo staticov rimuovi(int v, int[] in) che restituisce un nuovo array con gli interi presenti nell'array passato come argomento, ma con
    il valore v rimosso
    
        public static boolean rimuovi(int v, int[] in) {
    
    Ragiona un attimo: come farebbe a restituire un nuovo array se il tipo di ritorno è un boolean?
  • Re: Metodo per rimozione elemento array

    E poi perche usi while per iterare su un array?
  • Re: Metodo per rimozione elemento array

    Si avrei dovuto usare un for anche per la sostituzione dell'elemento.. ho fatto un po' di casino
  • Re: Metodo per rimozione elemento array

    Io avrei fatto una cosa tipo :

    static int[] rimuovi(int v, int[] inp){

    ArrayList<Integer> buf = new ArrayList<>();
    for (int i = 0; i < inp.length; i++) {
    if(inp[ i ] != v) {
    buf.add(inp[ i ]);
    }
    }

    return buf.stream().mapToInt(i -> i).toArray();

    }
  • Re: Metodo per rimozione elemento array

    KernelPanic ha scritto:


    Si avrei dovuto usare un for anche per la sostituzione dell'elemento.. ho fatto un po' di casino
    Devi ragionare così: ti è stato chiesto di fare in modo che rimuovi restituisca un nuovo array. Bene, nel rimuovi devi istanziare un nuovo array ma .. ovviamente devi sapere la dimensione. E non la sai così a priori, perché devi "contare" quanti valori dovranno restare in uscita. Quindi, prima conti quanti valori risulteranno in output, poi istanzi l'array, poi ci copi i valori che devono esserci.

    magicsign ha scritto:


    Io avrei fatto una cosa tipo :
    Con la Stream API si fa tutto in 1 riga. Ma ho la (vaga) idea che NON sia quello l'obiettivo dell' "esercizio".
  • Re: Metodo per rimozione elemento array

    magicsign ha scritto:


    Io avrei fatto una cosa tipo :

    static int[] rimuovi(int v, int[] inp){

    ArrayList<Integer> buf = new ArrayList<>();
    for (int i = 0; i < inp.length; i++) {
    if(inp[ i ] != v) {
    buf.add(inp[ i ]);
    }
    }

    return buf.stream().mapToInt(i -> i).toArray();

    }
    Va bene ma la soluzione è lenta. Se ci pensi bene non ti serve un array dinamico
  • Re: Metodo per rimozione elemento array

    Grazie mille a tutti, sono riuscita grazie ai vostri input ad arrivare ad una conclusione funzionante che sarebbe
    public class Array_method {
    
        public static int[] rimuovi(int v, int[] in) {
      
            int contatore =0; //contatore posizioni
    
            for(int i=0; i <in.length-1; i++) {  
             //-1 altrimenti index out of bound exception   
                   if(in[i]==v) {   
                   contatore++;
               }  
            }
            int[] newArray = new int[in.length-contatore]; 
           
            int j=0; //altro contatore
            
            for(int m=0; m<in.length;m++) { 
                //salvare i valori nel caso siano diversi da v nel nuovo array
                if(in[m]!=v) {
                    newArray[j]=in[m];
                    j++;
                }   
          }       
            return newArray;
        }
    
    Anche Magicsign la soluzione dell'arraylist mi piace molto in quanto riesco a gestirmeli molto meglio rispetto ad un array normale in quanto ho capito meglio il meccanismo!

    magicsign ha scritto:


    Io avrei fatto una cosa tipo :

    static int[] rimuovi(int v, int[] inp){

    ArrayList<Integer> buf = new ArrayList<>();
    for (int i = 0; i < inp.length; i++) {
    if(inp[ i ] != v) {
    buf.add(inp[ i ]);
    }
    }

    return buf.stream().mapToInt(i -> i).toArray();

    }
  • Re: Metodo per rimozione elemento array

    KernelPanic ha scritto:



    Anche Magicsign la soluzione dell'arraylist mi piace molto in quanto riesco a gestirmeli molto meglio rispetto ad un array normale in quanto ho capito meglio il meccanismo!
    Certo, è una buona soluzione per gli array piccoli perché è intuitiva, ma prova a pensare cosa succederebbe con array grandi... non a caso andbin ti ha suggerito l'altra strada
  • Re: Metodo per rimozione elemento array

    KernelPanic ha scritto:


    Grazie mille a tutti, sono riuscita grazie ai vostri input ad arrivare ad una conclusione funzionante che sarebbe
    No, non è completamente corretta. Quel -1 non serve. E non complicare le cose semplici: è più comodo contare i valori che ci dovranno essere invece che quelli da escludere.
Devi accedere o registrarti per scrivere nel forum
9 risposte