Riempimento array interi crescenti

di il
11 risposte

Riempimento array interi crescenti

Ciao a tutti, stavo scrivendo un programmino che mi permette di riempire un array (NON POSSO USARE ARRAYLIST)
Vorrei capire però che controllo mettere affinchè , controlli a punto, che il successivo intero inserito sia strettamente positivo.
Così non funziona ma credo di non essere lontanissimo.

Per comodità, ho messo il primo numero "senza controlli"
Dove sbaglio ?

import java.util.Scanner;
public class inserimento2 {

	public static void main(String[] args) {

		Scanner scan=new Scanner(System.in);
		int[]num=new int[5];
		boolean ritenta=false;
		//INSERIMENTO INTERI NELL'ARRAY
		System.out.println("Inserisci numero: ");
		num[0]=scan.nextInt();
		
		for(int j=1; j<num.length; j++){
			System.out.println("Inserisci numero: ");
			int temp = scan.nextInt();
			//se il numero inserito è maggiore del primo, ok
			if(temp>num[j-1]){
				num[j]=temp;
			}else if(temp<num[j-1]){
				while(ritenta==true){
					System.out.println("riprova, inserimento errato");
				
			}
					
				
			}
		}
		//STAMPA
		for(int j=0; j<num.length; j++){	
			System.out.println(num[j]);
		}
		}
	}

11 Risposte

  • Re: Riempimento array interi crescenti

    Ciascun numero nell'array DEVE essere strettamente maggiore di quello appena precedente? Se è così, te lo dico subito .... è molto molto più semplice di quello che hai scritto.
  • Re: Riempimento array interi crescenti

    Sbaglio o in questo modo "ritenta" non è MAI true?
  • Re: Riempimento array interi crescenti

    E quindi??
    mi spiegate meglio?
  • Re: Riempimento array interi crescenti

    Quindi prova a dire tu cosa succede nel caso in cui entri nel blocco else if (quando temp è minore di num[j-1]).
    Basta seguire passo a passo il flusso del tuo ciclo, è una cosa che devi imparare a fare per poter programmare.
    Tra l'altro prova a pensare a cosa succederebbe se invece ritenta fosse true quando entri nell'else if
  • Re: Riempimento array interi crescenti

    cicciozza ha scritto:


    E quindi??
    mi spiegate meglio?
    Il codice che hai scritto si può anche correggere, certo. Ma ti assicuro che se "ragionassi" un pochino di più, questa cosa si fa in metà del codice che hai scritto.
  • Re: Riempimento array interi crescenti

    	do { 
    					   System.out.println("Inserisci un numero"); 
    					   for(int i=0;i<num.length;i++)
    						   
    					   temp=scan.nextInt();
    					   num[i]=temp;
    					}  while (temp>num[i-1]);
    
    
    Se lo modifico così per esempio, il while mi dice che non riconosce i!

  • Re: Riempimento array interi crescenti

    cicciozza ha scritto:


    Se lo modifico così per esempio, il while mi dice che non riconosce i!
    Questo perché il body ("corpo") del for è composto SOLO da temp=scan.nextInt(); e i essendo dichiarato nella espressione di inizializzazione del for, è "visibile" solo nel corpo del for, non al di fuori.

    Ma a parte tutto questo, il codice NON ha proprio senso. Semmai avrebbe senso esattamente l'inverso di quello che hai fatto: ovvero un for esterno per ciclare sulla lunghezza ("per ciascun elemento da inserire") e poi dentro un do-while per ripetere eventualmente l'input ("chiedo l'input, se non va bene, ripeto").
  • Re: Riempimento array interi crescenti

    Un po' meglio ma ancora non ci siamo!
    Help me

    import java.util.Scanner;
    public class inserimento2 {
    
    			public static void main(String[] args) {
    				Scanner scan=new Scanner(System.in);
    				int[]num=new int[5];
    				int temp = 0;
    				//INSERIMENTO INTERI NELL'ARRAY
    				System.out.println("Inserisci un numero"); 
    				num[0]=scan.nextInt();
    				boolean valido;
    		
    				for(int i=1;i<num.length;i++){
    					temp=scan.nextInt();
    					do{
    						if(temp>num[i-1])
    						num[i]=temp;
    						else
    							System.out.println("riprova");
    						valido=false;
    						//qui vorrei inserire qualcosa per dire che deve provare nuovamente a chiedere di 
    						//inserire nuovamente un numero, che sia maggiore del precedente
    					}  while (valido!=false);
    					
    				}
    				//STAMPA
    				for(int i=0; i<num.length; i++){	
    					System.out.println(num[i]);
    				}
    			}
    		}
  • Re: Riempimento array interi crescenti

    cicciozza ha scritto:


    Un po' meglio ma ancora non ci siamo!
    Ovviamente non ci siamo ... il scan.nextInt() lo fai una volta per un indice e non dentro il do-while. Inoltre la variabile "valido" non è gestita appropriatamente (te l'ho già detto, una variabile del genere sarebbe del tutto evitabile), non è inizializzata e non la vedo mai a true.
  • Re: Riempimento array interi crescenti

    
    for(int i=1;i<num.length;i++){	
    					do{
    						temp=scan.nextInt();
    						if(temp>num[i-1])
    						num[i]=temp;
    						else
    							System.out.println("riprova");
    						valido=false;
    						//qui vorrei inserire qualcosa per dire che deve provare nuovamente a chiedere di 
    						//inserire nuovamente un numero, che sia maggiore del precedente
    					}  while (valido!=false);
    
    ok,lo scan.next l'ho messo al posto giusto
    però quando mi spunta il ("riprova"), non aggiunge il numero all'array purtroppo
  • Re: Riempimento array interi crescenti

    Nell'else metti
    
    else
    {
      do
      {
        System.out.println("riprova");
        temp=scan.nextInt();
      }while(temp<=num[i]);
      num[i]=temp;
    }
    
    Io non ho nemmeno iniziato a studiare java, quindi perdonatemi se sbaglio, conosco solo il C++ e mi baso su quello che so, però mi sembra che così sia corretto. Devi imparare ad usare bene le graffe però, che prima erano sbagliate
Devi accedere o registrarti per scrivere nel forum
11 risposte