Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Verificare se un vettore è compreso in un altro

    Ciao raga, vorrei un aiuto su come risolvere questo problema: dati due array di interi A e B (di dimensioni N e M non necessariamente uguali) scrivere la codifica java per verificare se tutti i valori di B appaiono in A. Ora vi posto come l'ho fatto io solo che non funziona, mi esce questo errore: java.lang.ArrayIndexOutOfBoundsException: 0 Sapete dirmi perché? Sto impazzendo... Grazie in anticipo.

    Classe Vettorecompreso:

    codice:
    package Vettorecompreso;
    public class Vettorecompreso {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      ProgVettoreCompreso c=new ProgVettoreCompreso();
      c.Carica();
      c.Incluso();
     }
    }

    Classe ProgVettoreCompreso:
    codice:
    package Vettorecompreso;
    import java.util.Scanner;
    public class ProgVettoreCompreso {
     Scanner in=new Scanner(System.in);
     int n,m;
     int a[]=new int[n];
     int b[]=new int[m];
     
     public void Carica()
     {  
      do
      {
       System.out.println("Quanti elementi ha il primo vettore?");
       n=in.nextInt();
       System.out.println("Quanti elementi ha il secondo vettore?");
       m=in.nextInt();
      }while(n<m);
      
      for(int i=0;i<n;i++)
      {
       System.out.println("Inserisci un elemento del primo vettore?");
       a[i]=in.nextInt();
      }
      
      for(int i=0;i<m;i++)
      {
       System.out.println("Inserisci un elemento del secondo vettore?");
       b[i]=in.nextInt();
      }
     }
     
     public void Incluso()
     {
      int i=0,cont=0;
      while(i<m)
      {
       int j=0;
       for(j=0;j<n;j++)
       {
        if(a[j]==b[i])
        {
         cont++;
        }
       }
       i++;
      }
      if(cont==m)
      {
       System.out.println("Vettore b compreso nel vettore a");
      }
      else
      {
       System.out.println("Vettore b non compreso nel vettore a");
      }
     }
     
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Tu chiedi all'utente quanti valori ha ciascun array. Poi vai a chiedere ciascun valore dei due array... ma non hai inizializzato nessuno dei due.

    Se tu inizializzi i due array a livello di classe (come stai facendo), stai creando inizialmente due array da 0 elementi ciascuno. Quando poi vai a chiedere all'utente "n" e "m", allora devi ridimensionare i due array... cioè, devi allocare nuovamente i due array.

    Il mio consiglio è di non fare le inizializzazioni (inutili) a livello di classe, ma falle direttamente nel metodo carica().

    codice:
    public class ProgVettoreCompreso {
     Scanner in=new Scanner(System.in);
     int n,m;
     int a[]=new int[n];   // Perfettamente inutile qui: n vale 0
     int b[]=new int[m];   // Perfettamente inutile qui: m vale 0
     ...

    PS: I nomi dei metodi dovrebbero iniziare con la lettera minuscola. Solo i nomi delle classi vanno con la maiuscola.


    Ciao.
    Ultima modifica di LeleFT; 08-04-2015 a 17:08
    "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 L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Saverioapple Visualizza il messaggio
    per verificare se tutti i valori di B appaiono in A.
    Con lo stesso ordine? (e contigui o no) Oppure in qualunque ordine?
    I dettagli sono importanti ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Tu chiedi all'utente quanti valori ha ciascun array. Poi vai a chiedere ciascun valore dei due array... ma non hai inizializzato nessuno dei due.

    Se tu inizializzi i due array a livello di classe (come stai facendo), stai creando inizialmente due array da 0 elementi ciascuno. Quando poi vai a chiedere all'utente "n" e "m", allora devi ridimensionare i due array... cioè, devi allocare nuovamente i due array.

    Il mio consiglio è di non fare le inizializzazioni (inutili) a livello di classe, ma falle direttamente nel metodo carica().

    codice:
    public class ProgVettoreCompreso {
     Scanner in=new Scanner(System.in);
     int n,m;
     int a[]=new int[n];   // Perfettamente inutile qui: n vale 0
     int b[]=new int[m];   // Perfettamente inutile qui: m vale 0
     ...

    PS: I nomi dei metodi dovrebbero iniziare con la lettera minuscola. Solo i nomi delle classi vanno con la maiuscola.


    Ciao.
    Grazie mille per la risposta. Facendo come hai detto tu, cioè fare le inizializzazioni dei vettori nel metodo carica, mi da errore nel metodo Incluso dove scrivo: if(a[j]==b[i]) mi dice che a e b non possono risolvere variabili... come posso fare qui?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io ti avevo suggerito di spostare le inizializzazioni, non le dichiarazioni.
    Sono due cose diverse:

    codice:
    // Dichiarazioni
    int[] a;
    int[] b;
    
    ...
    
    // Inizializzazioni
    a = new int[n];
    b = new int[m];

    Non confondere la dichiarazione di una variabile con la sua inizializzazione. Spesso (come avevi fatto tu) dichiarazione ed inizializzazione vengono fatte "in un sol colpo", ma sono due operazioni diverse. La dichiarazione serve a far conoscere la variabile all'interno del blocco in cui viene, appunto, dichiarata. L'inizializzazione serve a dargli un valore iniziale.

    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

  6. #6
    Parti nel creare una classe Vettore e nel costruttore crei un ciclo for per inserire i valori.

    crei due vettori e poi lavori sul confronto.

    il tuo metodo carica sembra un programma in PASCAL, java è OO.

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.