Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: invertire array

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53

    invertire array

    salve ho questo metodo
    codice:
    public void reverse() {
    		for (int k = monsize; k <= 0; k--) {
    			int t=0;
    		monrev[t] = mon[k];	
    			t++;
    		}
    	}
    dove "monsize" è la grandezza dell'array
    mon[] è l'array ordinato
    monrev[] è un array vuoto dove vorrei inserire il contenuto di "mon" al contrario.
    ma facendo come scritto qui sopra non funziona monrev mi da come risultato un array identico a mon come posso fare?
    P.S poi nel main uso un normale ciclo che va da 0 a lunghezza dell'array per fare stampare i risultati.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707

    Re: invertire array

    Originariamente inviato da dik1992
    ma facendo come scritto qui sopra non funziona monrev mi da come risultato un array identico a mon
    Più che altro è che quella funzione non fa nulla, in quanto hai scritto:
    for (int k = monsize; k <= 0; k--)
    invece di:
    for (int k = monsize; k >= 0; k--)

    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53

    Re: Re: invertire array

    Originariamente inviato da c0der
    Più che altro è che quella funzione non fa nulla, in quanto hai scritto:
    for (int k = monsize; k <= 0; k--)
    invece di:
    for (int k = monsize; k >= 0; k--)

    Ciao.
    Anche facendo come dici tu il risultato è lo stesso (ho provato) ma comunque come hai scritto tu dovrebbe essere sbagliato in quanto il ciclo deve andare da monsize (facciamo esempio che sia 3) a k <=0 (che in pratica si ferma a 0.
    quindi va da 3 a 0 calando di 1 alla volta almeno cosi dovrebbe essere

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707

    Re: Re: Re: invertire array

    Originariamente inviato da dik1992
    Anche facendo come dici tu il risultato è lo stesso (ho provato) ma comunque come hai scritto tu dovrebbe essere sbagliato in quanto il ciclo deve andare da monsize (facciamo esempio che sia 3) a k <=0 (che in pratica si ferma a 0.
    quindi va da 3 a 0 calando di 1 alla volta almeno cosi dovrebbe essere
    Vorrei capire questo che hai detto. Facciamo esempio che come dici tu il ciclo deve andare da 3 a 0. Spiegami perché la condizione k >= 0 secondo te è sbagliata.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53

    Re: Re: Re: Re: invertire array

    Originariamente inviato da c0der
    Vorrei capire questo che hai detto. Facciamo esempio che come dici tu il ciclo deve andare da 3 a 0. Spiegami perché la condizione k >= 0 secondo te è sbagliata.

    perchè con k maggiore uguale a 0 il ciclo termina al primo giro perchè size (è il numero di elementi presenti che deve essere positivo per forza a eccezzione che si inseriscano 0 elementi)
    quindi k e >= a 0 già al primo giro quindi termina subito.
    comunque ho provato a fare come dici ma il risultato è uguale

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707

    Re: Re: Re: Re: Re: invertire array

    Originariamente inviato da dik1992
    perchè con k maggiore uguale a 0 il ciclo termina al primo giro perchè size (è il numero di elementi presenti che deve essere positivo per forza a eccezzione che si inseriscano 0 elementi)
    quindi k e >= a 0 già al primo giro quindi termina subito.
    Cominciamo a chiarire questo problema.
    Vedi: http://docs.oracle.com/javase/tutori...bolts/for.html
    La condizione è una condizione di terminazione ossia il ciclo for termina quando quell'espressione diventa falsa.
    k >= 0 non può far terminare il for, perché è vera. Con k >=0 il for termina invece quando k diventa negativa, che è il comportamento voluto.
    Se mettevi k <= 0 era falsa fin dall'inizio e non veniva eseguita neppure una iterazione.
    Dici che è più chiaro adesso?

  7. #7
    Allora forse non ti è chiara l'espressione "guardia" di un ciclo.
    codice:
    		for (int k = monsize; k <= 0; k--)
    monsize=  3
    Questa condizione si legge finchè k <= 0 effettua il ciclo ed ad ogni passo sottrai uno a k.
    ciò vuol dire che la condizione del for è sbagliata come ti è stato detto.
    Il problema del fatto che non ti funzioni con la guardia corretta k >= 0 e perchè sbagli l'incremento del secondo indice nel for in quanto ad ogni ciclo resetti il valore di "t"

    codice:
    for (int k = monsize, t = 0; k <= 0; k--,t++) {
    		//int t=0; errore
    		monrev[t] = mon[k];	
    		//	t++;
    		}

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53
    Originariamente inviato da francesco.muia
    Allora forse non ti è chiara l'espressione "guardia" di un ciclo.
    codice:
    		for (int k = monsize; k <= 0; k--)
    monsize=  3
    Questa condizione si legge finchè k <= 0 effettua il ciclo ed ad ogni passo sottrai uno a k.
    ciò vuol dire che la condizione del for è sbagliata come ti è stato detto.
    Il problema del fatto che non ti funzioni con la guardia corretta k >= 0 e perchè sbagli l'incremento del secondo indice nel for in quanto ad ogni ciclo resetti il valore di "t"

    codice:
    for (int k = monsize, t = 0; k <= 0; k--,t++) {
    		//int t=0; errore
    		monrev[t] = mon[k];	
    		//	t++;
    		}
    grazie per il tuo aiuto mi sono riletto le basi dei cicli for e infatti è come dici tu.
    Comunque npn funziona lo stesso ti faccio vedere come l'ho corretto

    codice:
    public void reverse() {
    		int t=0;
    		for (int k = monsize-1; k >= 0; k--) {
    			
    		monrev[t] = mon[k];	
    			t++;
    		}
    	}
    ho aggiunto monsize -1 e dichiarato t=0 fuori dal ciclo

  9. #9
    Io non so cosa non ti funzioni se ovviamente non c'è lo dici.
    Cmq il codice postato è corretto.
    codice:
    package it.test;
    
    import java.util.Arrays;
    
    public class TestReverse
    {
    	private int monsize = 10;
    
    	private int[] monrev = new int[monsize];
    
    	private int[] mon = new int[monsize];
    
    	public void test()
    	{
    		//INIZIALIZZO MON
    		for(int i = 0; i < mon.length ; i++)
    		{
    			mon[i] = i;
    		}
    		//effettuo il reverse
    		this.reverse();
    		System.out.println("Array non invertito " +Arrays.toString(mon));
    		System.out.println("Array invertito " +Arrays.toString(monrev));
    	}
    
    	public void reverse()
    	{
    		int t = 0;
    		for (int k = monsize - 1; k >= 0; k--)
    		{
    
    			monrev[t] = mon[k];
    			t++;
    		}
    	}
    	public static void main(String[] args)
    	{
    		new TestReverse().test();
    	}
    }
    Se lo mandi in esecuzione vedrai che stampa :

    Array non invertito [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    Array invertito [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    53
    Originariamente inviato da francesco.muia
    Io non so cosa non ti funzioni se ovviamente non c'è lo dici.
    Cmq il codice postato è corretto.
    codice:
    package it.test;
    
    import java.util.Arrays;
    
    public class TestReverse
    {
    	private int monsize = 10;
    
    	private int[] monrev = new int[monsize];
    
    	private int[] mon = new int[monsize];
    
    	public void test()
    	{
    		//INIZIALIZZO MON
    		for(int i = 0; i < mon.length ; i++)
    		{
    			mon[i] = i;
    		}
    		//effettuo il reverse
    		this.reverse();
    		System.out.println("Array non invertito " +Arrays.toString(mon));
    		System.out.println("Array invertito " +Arrays.toString(monrev));
    	}
    
    	public void reverse()
    	{
    		int t = 0;
    		for (int k = monsize - 1; k >= 0; k--)
    		{
    
    			monrev[t] = mon[k];
    			t++;
    		}
    	}
    	public static void main(String[] args)
    	{
    		new TestReverse().test();
    	}
    }
    Se lo mandi in esecuzione vedrai che stampa :

    Array non invertito [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    Array invertito [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]


    grazie per il tempo che stai perdendo ti stampo tutto il programma e se hai tempo e voglia di vederlo ti sarei grato.

    classe principale (interessa solo il metodo reverse)

    codice:
    import javax.swing.JOptionPane;
    
    public class purse {
    	String[] mon = new String[10];
    	String[] monrev = new String[10];
    	int monsize = 0;
    	int othermonsize=0;
    	String[] othermon = new String [10];
    
    	public void rest() {
    		int stop = 3;
    		int prov = 1;
    		int i = 0;
    		while (stop > prov) {
    			mon[i] = JOptionPane.showInputDialog("inserire il tipo di moneta da mettere nella borssa");
    			stop = Integer.parseInt(JOptionPane.showInputDialog("inserire 0 se è l'ultima moneta da mettere nella borsa altrimenti qualsiasi altro numero positivo"));
    			i++;
    			monsize++;
    		}
    
    	}
    
    	public String[] getmon() {
    		return mon;
    	}
    
    	public int getsize() {
    		return monsize;
    	}
    
    	public void reverse() {
    		int t=0;
    		for (int k = monsize-1; k >= 0; k--) {
    			
    		monrev[t] = mon[k];	
    			t++;
    		}
    	}
    	public String[] getreverse(){
    		return monrev;
    	}
    	public void transfer(){
    		int stop=3;
    		int prov=1;
    		int p=0;
    		
    		
    		while(stop > prov){
    			
    		othermon[p] = JOptionPane.showInputDialog("inserire altro contnuto");
    		stop = Integer.parseInt(JOptionPane.showInputDialog("inserire 0 se è l'ultima moneta da mettere nella borsa altrimenti qualsiasi altro numero positivo"));
    		p++;
    		othermonsize++;
    	  }
    	}
    	public String[] getothermon(){
    		return othermon;
    	}
    	public int othermonsi (){
    		return othermonsize;
    	}
    }
    main

    codice:
    public class pursemain {
    
    
    	public static void main(String[] args) {
    		purse p = new purse();
    	p.rest();
    	int sizepurse = p.getsize();
    	String[] borsello = new String[10];
    	for (int i=0; i<sizepurse;i++){
    		borsello[i]= p.mon[i];
    	}
    	System.out.print("le prime monete sono: ");
    	for (int j = 0; j<sizepurse;j++){
    		
    	System.out.print(borsello[j]);
    	System.out.print(" ");
    	}
    	p.reverse();
    	String[] rever = new String[10];
    	for(int b=0; b<sizepurse;b++){
    		rever[b] = p.mon[b];
    		
    		
    	}
    	System.out.println(" ");
    	System.out.print("le monete invertite sono: ");
    	for(int c =0; c<sizepurse;c++){
    		
    		System.out.print(" ");
    		System.out.print(rever[c]);
    	}
    	
    		p.transfer();
    		int sizetotal = p.othermonsi();
    		System.out.println(" ");
    		System.out.print("il totale delle monete è: ");
    		for (int ii=0;ii< sizepurse; ii++){
    			System.out.print(p.mon[ii]);
    			System.out.print(" ");
    		}
    		
    			for(int w=0; w < sizetotal;w++){
    			
    				System.out.print(p.othermon[w]);
    				System.out.print(" ");
    		}
    	}
    
    }

    non mi da nessun errore il programma funziona se non fosse che al posto di scrivere i numeri invertiti li scrive in modo ordinato

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.