Riempimento array interi crescenti

di Anonimizzato20656 il
11 risposte
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

  • 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.
  • Sbaglio o in questo modo "ritenta" non è MAI true?
  • E quindi??
    mi spiegate meglio?
  • 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
  • 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.
  • 	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!

  • 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").
  • 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]);
    				}
    			}
    		}
  • 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.
  • 
    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
  • 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