Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143

    JAVA: Sequenza intera lunga non più di un tot

    Ciao,
    devo scrivere un programma Java che legge da tastiera una sequenza di interi lunga non più di 10 elementi e terminata da un non intero; inserisce in un array questi valori e scrive su una riga (per ogni intero) la sequenza dei suoi divisori.

    So come copiare una sequenza di interi in un array ma non riesco a mettergli il controllo di non superare i 10 elementi. Posto quello che ho scritto:

    codice:
     
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt()) {
    			n = tast.nextInt();
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++)
    			System.out.println(a[i]);
    	}	
    }
    Fin qui funziona..ma il controllo?
    E come faccio la seconda parte dell'esercizio? quella dei divisori..

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: JAVA: Sequenza intera lunga non più di un tot

    Originariamente inviato da vfldj
    Ciao,
    devo scrivere un programma Java che legge da tastiera una sequenza di interi lunga non più di 10 elementi e terminata da un non intero; inserisce in un array questi valori e scrive su una riga (per ogni intero) la sequenza dei suoi divisori.

    So come copiare una sequenza di interi in un array ma non riesco a mettergli il controllo di non superare i 10 elementi. Posto quello che ho scritto:

    codice:
     
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt()) {
    			n = tast.nextInt();
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++)
    			System.out.println(a[i]);
    	}	
    }
    Fin qui funziona..ma il controllo?
    E come faccio la seconda parte dell'esercizio? quella dei divisori..

    Grazie
    Scusa ma perché fai tutti quei passaggi invece di inserire direttamente il valore in un array unico?
    Per tenere il conto di quelli che hai letto puoi usare una variabile intera come contatore, quando arriva a 10 fermi il ciclo.

    Se non t'interessa alcuna ottimizzazione, basta che per ogni numero N dell'array inizi un ciclo da 0 a N, e ad ogni iterazione se N è divisibile per l'indice (puoi verificarlo facilmente con l'operatore %) lo stampi, altrimenti no.
    Un ciclo annidato in un altro ciclo, insomma.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    eh ci sto provando ma non funziona, mi sto incasinando..
    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int div = 2;
    		int[] c = new int[5];
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt()) {
    			n = tast.nextInt();
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=0; j<5; j++) {
    				while (div <= a[i]) {
    					if (a[i] % div == 0) {
    						c[j] = div;
    						div++;
    					}
    					else
    						div++;
    				System.out.println(a[i] + ": 1 " + c[j]);
    				}
    				//System.out.println(a[i] + ": 1 " + c[j]);
    			}
    		}
    	}	
    }
    penso sia tutto sbagliato

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da vfldj
    eh ci sto provando ma non funziona, mi sto incasinando..
    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int div = 2;
    		int[] c = new int[5];
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt()) {
    			n = tast.nextInt();
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=0; j<5; j++) {
    				while (div <= a[i]) {
    					if (a[i] % div == 0) {
    						c[j] = div;
    						div++;
    					}
    					else
    						div++;
    				System.out.println(a[i] + ": 1 " + c[j]);
    				}
    				//System.out.println(a[i] + ": 1 " + c[j]);
    			}
    		}
    	}	
    }
    penso sia tutto sbagliato
    Non capisco quell'array da 5, e i cicli necessari sono solo due...

    • primo ciclo che scorre l'array dei numeri inseriti da tastiera
    • ciclo interno che parte da 0 e arriva al numero contenuto nella cella [i] dell'array che sta scorrendo il ciclo esterno
    • ad ogni iterazione di ques'ultimo ciclo fai array[i]%j (supponendo che i sia l'indice del ciclo esterno e j di quello interno) e se viene 0 significa che è divisibile quindi puoi stampare j, altrimenti non fai niente


    Stai dichiarando un po' di cose inutili, non complicarti la vita... ripeto, anche la lettura da tastiera non necessitava di un secondo array, bastava quello dove mettere i numeri.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Grazie per la tua pazienza!
    Il 5 l'avevo messo per fare una prova..
    so che la lettura da tastiera non necessita di un secondo array ma l'esercizio mi chiedeva di fare in questo modo..
    Ho provato a correggere seguendo i tuoi consigli però non so cosa scrivere al posto dei puntini..

    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int cont = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt() && cont<10) {
    			n = tast.nextInt();
    			cont++;
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=0; j<a[i]; j++) {
    				if (a[i] % j == 0) {
    					...
    				}
    				else
    					...
    			System.out.println(a[i] + ...);
    			}
    		}
    
    	}	
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da vfldj
    Grazie per la tua pazienza!
    Il 5 l'avevo messo per fare una prova..
    so che la lettura da tastiera non necessita di un secondo array ma l'esercizio mi chiedeva di fare in questo modo..
    Ho provato a correggere seguendo i tuoi consigli però non so cosa scrivere al posto dei puntini..

    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int cont = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt() && cont<10) {
    			n = tast.nextInt();
    			cont++;
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=0; j<a[i]; j++) {
    				if (a[i] % j == 0) {
    					...
    				}
    				else
    					...
    			System.out.println(a[i] + ...);
    			}
    		}
    
    	}	
    }
    Semplicemente dentro al ciclo interno metti un if con quella condizione, l'else non serve nemmeno... se il modulo è 0 stampa j, stop.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    sarò cretina però non ci riesco..
    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int cont = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt() && cont<10) {
    			n = tast.nextInt();
    			cont++;
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=1; j<a[i]; j++) {
    				if (a[i] % j == 0) {
    					System.out.println(j);
    				}
    			System.out.println(a[i]);
    			}
    		}
    
    	}	
    }
    modificato così non va..

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da vfldj
    sarò cretina però non ci riesco..
    codice:
    import java.util.Scanner;
    public class Esercizio1 {
    	public static void main(String[] args) {
    		Scanner tast = new Scanner(System.in);
    		
    		int[] a = new int[0];
    		int[] b;
    		int n = 0;
    		int cont = 0;
    		
    		System.out.println("Inserisci un intero o un non-int per finire");
    		while (tast.hasNextInt() && cont<10) {
    			n = tast.nextInt();
    			cont++;
    			b = new int[a.length + 1];
    			for(int i=0; i<a.length; i++) {
    				b[i] = a[i];
    			}
    			b[b.length - 1] = n;
    			a = b;
    			System.out.println("Inserisci un intero o un non-int per finire");
    		}
    		System.out.println("Array risultato: ");	
    		for(int i=0; i<a.length; i++) {
    			for(int j=1; j<a[i]; j++) {
    				if (a[i] % j == 0) {
    					System.out.println(j);
    				}
    			System.out.println(a[i]);
    			}
    		}
    
    	}	
    }
    modificato così non va..
    Ci sei, è principalmente una questione di organizzazione dell'output.

    innanzitutto il ciclo interno deve iterare finché j<=a[i], non solo minore, perché ogni numero è divisore di sé stesso.
    Inoltre se usi sempre il metodo println vai sempre a capo e l'output è incomprensibile, usa print fra un numero e l'altro per tenerli nella stessa riga, e println per andare a capo quando serve... una cosa del genere è molto più comprensibile:

    codice:
    for(int i = 0; i < a.length; i++) {
    
    	System.out.print("I divisori di " + a[i] + " sono: ");
    
    	for(int j = 1; j <= a[i]; j++) {
    		if (a[i] % j == 0) {
    			System.out.print(j + " ");
    		}
    	}
    
    	System.out.println();
    
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    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.