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

    confronto tra array di dimensioni diverse

    salve ragazzi, ho l'esigenza di confrontare due array ordinati in maniera crescente di dimensioni diverse e vorrei trasferire gli elementi ordinati in maniera crescente in un unico array. questo è il codice
    codice:
    public class DueArrayInUnUnico{
    	public static void main (String[] args){
    		int a[] = new int [6];
    		int b[] = new int [4];
    		int c[] = new int [10];
    		int i,k=0,j;
    		
    		for(i=0; i<6; i++){
    			a[i] = (int) (100*Math.random());
    		 }
    		
    		for(j=0; j<4; j++){
    			b[j] = (int) (100*Math.random());
    		}
    		i=0;
    		j=0;
    
    		for(k=0; k<10;k++){
    			if(a[i] < b[j]){
    				
    				c[k] = a[i];
    				i++;
    			 }
    			else{
    				c[k]=b[j];
    				j++;
    			 }
    		}
    		
    		System.out.println("sono il primo vettore");
    		for(i=0; i<6; i++){
    			System.out.println(a[i]);
    		 }
    		System.out.println("sono il secondo vettore");
    
    		for(j=0; j<4; j++){
    			System.out.println(b[j]);
    		 }
    		System.out.println("sono il terzo vettore");
    		for(k=0; k<10; k++){
    			System.out.println(c[k]);
    		 }
    
    	}
    }
    mi il seguente errore al momento della compilazione:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at DueArrayInUnUnico.main(DueArrayInUnUnico.java:19)
    come posso risolvere? grazie mille

  2. #2
    Non ho guardato come funziona tutto il codice perché non ho molto tempo, ti dico però dove sta' l'errore:

    codice:
    for(k=0; k<10;k++){
       if(a[i] < b[j]){	
    	c[k] = a[i];
    	i++;
      }
    sopra fai un controllo tra due array con diverse dimensioni di cui "a" ha fino a 6 quindi 7 in tutto (compreso lo 0), i è 0 però poi viene sempre incrementato fino a che il for non termina, e dato che il for dura 10 volte arriverai che i sarà probabilmente tra 7-9, e siccome la dimensione di "a" è fino a 6, 7 o 10 non esistono e ti da' quell'errore, magari quando ho più tempo se non sei riuscito a risolvere ti aiuto a farlo.
    Forza Napoli!

  3. #3
    ho capito il problema adesso.. finalmente grazie , ho provato a cercare di risolverlo..ma non ci sono riuscito..

  4. #4
    Eccoti qua il risultato, il problema e che tu ordinavi l'array contemporaneamente mentre lo creavi, questo comportava parecchi problemi, invece devi prima creare l'array completo poi ordinarlo come faccio io, i valori basta che li limiti per quelli esatti con dei controlli come faccio io, questo è il codice (se poi consideri che valori uguali vanno tolti allora basta aggiungere vari controlli, tipo i valori uguali li trasformi in null e nel for salti cio' che è uguale a null anche):
    codice:
    public class DueArrayInUnUnico {
    	public static void main (String[] args){
    		int a[] = new int [6];
    		int b[] = new int [4];
    		int c[] = new int [10];
    		int i,k,f,t,j;
    		
    		//creo i valori negli array come fai tu.
    		for (i = 0; i<6; i++) {
    			a[i] = (int) (Math.random()*100);
    		}
    		for (j = 0; j<4; j++) {
    			b[j] = (int) (Math.random()*100);
    		}
    		
    		
    		/*ora considerando gli array esterni, dico esterni perché nel passaggio dei valori in un'altro array potevo farlo
    		contemporaneamente quando li creavo, ovviamente non ordinato ancora*/
    		for (k=0; k<10; k++) {
    			//ecco la risoluzione, controllo che i valori siano giusti e ordino l'array da un for esterno.
    			if (k<6)
    				c[k] = a[k]; 
    			else
    				c[k] = b[k-6];
    		}
    		
    		//for finale, ordinamento;
    		int valcurrent, vs;
    		for (f = 0; f<10; f++) {
    			valcurrent = c[f]; //considero il primo valore
    			for (t = f+1; t<10; t++) { //lo confronto con il resto dei valori
    				if (c[t]<valcurrent) { //controllo se il valore successivo è minore di quello considerato
    					vs = c[t]; //se si scambio i valori
    					c[t] = valcurrent;
    					valcurrent = vs;
    				} if (c[t]==valcurrent) continue; //se i valori sono uguali passo al valore successivo
    			}
    		}
    		for (f = 0; f<10; f++) {
    			System.out.println(c[f]); //stampo tutto a schermo.
    		}
    	}
    }
    Forza Napoli!

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.