Raddoppio dimensioni array

Andreawave

Nuovo Utente
27 Gen 2014
11
0
1
Ciao a tutti.
Sono alle prese con il seguente esercizio:
"Scrivere un programma java che legga da tastiera una sequenza di numeri interi e la memorizzi in un array. Il valore "0" indica la fine della sequenza.
Se l'array viene riempito, crearne uno nuovo di dimensione doppia rispetto al precedente; nella prima metà copiare gli elementi dell'array di partenza, nella seconda metà continuare ad inserire altri elementi da tastiera. Lo zero indica sempre la fine della sequenza".
Il codice che ho inserito è il seguente:

Codice:
public class DoppioArray {

   public static void main(String[] args) {
      
      InputWindow in = new InputWindow();
      OutputWindow out = new OutputWindow();
      final int MAX = 10;
      int[] tabella = new int[MAX];
      int i = 0;
      int x = in.readInt("Inserisci elemento");
      
      while(x != 0){
         if(i<tabella.length){
            tabella[0]=x;
            for(i=1; i<tabella.length; i++){
               x=in.readInt("Inserisci elemento");
               tabella[i]=x;
               
            }
            for(i=0; i<tabella.length; i++)
               out.write(tabella[i] + " ");
                out.writeln();
               
         }
         else{
            int[] doppio = new int[MAX*2];
            for(i=0; i<tabella.length; i++)
               doppio[i]=tabella[i];
            for(i=tabella.length; i<doppio.length; i++){
               x = in.readInt("Inserisci elemento");
               doppio[i]=x;
            }
            for(i=0; i<doppio.length; i++){
               out.write(doppio[i] + " ");
            }
         }
            
            
            
         
            

      }
         
   }

}
Il problema che riscontro è che anche se inserisco il valore 0, il programma non esce dalla sequenza e mi continua a chiedere di inserire altri valori.
Cosa c'è che sbaglio?
Grazie
 

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
La classe InputWindow è OutputWindow dove le hai prese, non esistono nella jdk di java, sono classi create da te o prese da qualche altra libreria esterna?

In ogni caso sei sicuro che il metodo readInt() restituisca un valore intero, da quello che so il dato restituito da tastiera è di tipo stringa, almeno che te non lo converti in qualche modo, in ogni caso, ho converti il valore in intero oppure modifichi la condizione del while cosi:

Codice:
x != '0'
 

Andreawave

Nuovo Utente
27 Gen 2014
11
0
1
Le classi InputWindow e OutputWindow sono state appositamente create. L'istruzione il metodo readInt() serve a leggere interi e non richiede conversioni esplicite.
Ho provato a modificare l'istruzione all'interno del while come tu mi hai scritto, ma il programma non mi esce ugualmente. Mi raddoppia la dimensione dell'array ogni volta che viene riempito, mi stampa tutti i numeri inseriti fino al riempimento dell'array e poi mi chiede di nuovo di inserire altri valori.
Però se inserisco lo zero, l'inserimento non s'interrompe.
 

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
Bhe.. ovvio che non ti esce, non ci avevo pensato neanche io la prima volta, non ti esce perché il ciclo for deve finire, fin quando non finisce non può validare la condizione del while, infatti se inserisci lo 0 come decimo numero ti esce, ho provato io stesso è mi funziona, la condizione di uscita dovresti metterlo anche all'interno del for, cosi:

Codice:
if (x == 0) {
   break;
}

Non so se mi sono spiegato, e scusa ma non ci avevo pensato prima.
 
Ultima modifica:

Andreawave

Nuovo Utente
27 Gen 2014
11
0
1
E senza dover usare necessariamente l'istruzione break? A lezione ci hanno spiegato le istruzioni break e continue(così come lo switch case) però ci hanno detto che non vogliono che si usino, soprattutto in sede d'esame.
 

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
In alternativa al break, puoi dichiarare il primo for in questo modo:

Codice:
for(i=1; i<tabella.length & x != 0; i++)

Nella condizione il for ha un'operazione logica, cioè, e true, e quindi si ripete, fino a quando entrambi ( & = and logico ) le operazioni sono vere.

Oppure metti una if che controlli se il valore della variabile x sia diverso da 0, prima di eseguire le operazioni del for.

Oltre a questi due metodi non mi ne viene nessun altro.

Lascia che ti dia un consiglio per programmare meglio, non so se lo sai già, ma per programmare, è soprattutto per evitare questi errori, cosa che infatti io nella prima risposta non ho fatto :), ma poi facendola mi sono accordo del problema, è che: dovresti eseguire il tuo programma mentalmente, operazione per operazione, cioè, io quando avevo degli errore mi prendevo un foglio, scrivevo mano mano le operazione che faceva il programma, in poche parole analizzavo il programma operazione per operazione ( tenendo conto dei cicli che ripetevano l'operazione e altro ), facendo cosi ho risolto parte dei problemi che ho riscontrato nella programmazione java, purtroppo java non è vb.net che ha incorporato questo metodo di analizi ( operazioe per operazione ), resta solo che farselo al mente, almeno che te non conosca un editor java che faccia ciò.
 
Ultima modifica:

Andreawave

Nuovo Utente
27 Gen 2014
11
0
1
Ok! Adesso funziona bene! Soltanto che la condizione:
Codice:
&& x!=0
va messa non solo nel primo ciclo for, ma anche nel secondo ciclo for dopo l'else.
Diventa quindi:
Codice:
else{
				int[] doppio = new int[MAX*2];
				for(i=0; i<tabella.length; i++)
					doppio[i]=tabella[i];
				for(i=tabella.length; i<doppio.length && x!=0; i++){
					x = in.readInt("Inserisci elemento");
					doppio[i]=x;
				}
				for(i=0; i<doppio.length; i++){
					out.write(doppio[i] + " ");
				}
			}
Grazie mille! E grazie mille per il consiglio!
 
Discussioni simili
Autore Titolo Forum Risposte Data
B Aumento dimensioni grafico Access Database 0
M Come impostare dimensioni percentuali corrette? HTML e CSS 3
Tommy03 Gestire dimensioni immagini PHP 4
D Difficile creazione excel di dati di grandi dimensioni Classic ASP 2
P [Photoshop] Consigli per logo dimensioni minime Photoshop 1
camilia Come posso dividere le grandi dimensioni del file PST? Windows e Software 2
A [Visual Basic] Frattali in 3 dimensioni Visual Basic 0
bluebirdoncanvas [Photoshop] problema dimensioni immagini o zoom Photoshop 0
F dimensioni file di paging Windows e Software 0
Social Service Compro pagine Facebook e Instagram Qualsiasi dimensioni Annunci servizi di Social Media Marketing 2
M [WordPress] [HTML] SVG tag: aumentare dimensioni elemento 'path' WordPress 0
E [Photoshop] Problemi con dimensioni immagini Photoshop 12
V [ASP] paginazione-risultati-query-grandi-dimensioni Classic ASP 8
filippino Dimensioni foto profilo e immagine copertina Facebook Social Media Marketing 2
M [WordPress] Problema dimensioni video WordPress 0
M Dimensioni diverse degli input text tra Firefox per Linux e Windows HTML e CSS 3
C Dimensioni font-size monitor grandi risoluzioni HTML e CSS 3
B Parole di varie dimensioni in html HTML e CSS 11
S Rendere responsive un player che ha dimensioni fisse HTML e CSS 3
T Apertura pagina a centro dello schermo e con dimensioni fisse Classic ASP 1
M Download file di gradi dimensioni. PHP 0
A Modifica dimensioni Fotogallery WordPress 1
M Leggere file di grandi dimensioni Java 2
C Dimensioni banner Guadagnare col Sito 0
asevenx Font con dimensioni più grandi su smartphone HTML e CSS 0
M dimensioni di una immagine PHP 1
X Dimensioni pagina scegliere layout HTML e CSS 2
M Dimensioni foglio A4 Discussioni Varie 2
M Problema dimensioni download PHP 2
renoir09 dimensioni e scala tag <video> usato sulla sidebar WordPress 0
C DIV di dimensioni variabili HTML e CSS 0
S Il sito cambia dimensioni e posizionamento componenti in diversi computer HTML e CSS 1
C Aumentare le dimensioni di una textarea in funzione delle righe presenti. Javascript 13
J problema dimensioni immagini prodotti Joomla 4
IImanuII Allegato controllo dimensioni PHP 17
U [Vendo]Banner di diverse dimensioni su diversi siti Vendere e Acquistare pubblicita' online 0
Z Ogni Drag DIV ha le sue dimensioni Javascript 2
U [Vendo]Banner Grandi Dimensioni Vendere e Acquistare pubblicita' online 1
Frank10 Dimensioni consigliate in generale per i siti web? Webdesign e Grafica 9
A Get Dimensioni Immagini Javascript 0
T [Dw CS5] Aumentare dimensioni dei caratteri nella finestra Code e Split HTML e CSS 0
F Ridurre dimensioni in pixel dei filmati .swf Flash 0
M Aprire una finestra con dimensioni fisse HTML e CSS 8
H Dimensioni database MSAccess non diminuiscono nonostante svuoto le tabelle Database 3
S dimensioni popup in un file flash Flash 1
C tabelle dimensioni fisse Dreamweaver Webdesign e Grafica 0
D Disperazione CSS, qualcuno mi aiuta a ridurre le dimensioni? HTML e CSS 1
P Esportare Database di grandi dimensioni Database 1
P Sito In Flash Con Dimensioni Fisse Della Finestra Del Browser ? Flash 0
C Allegati di grosse dimensioni!!! PHP 2

Discussioni simili