Array while e vari

di il
19 risposte

Array while e vari

Salve ragazzi, affrontando il ciclo while ed esercitandomi mi sono inventato un esercizio nemmeno tanto complicato.
-inserimento da riga di comando di svariati dati a scelta, che vengono poi stampati, contati e stampato il risultato di quanti dati sono sati immessi.
a primo impatto sono andato con un filo di gas(vai valeeeee46) e questo e' il risultato(mi raccomando se no vi piace la forma o l'idea di cio che ho fatto e come ho fatto o avessi potuto fare diversamente, avrei piacere che mi criticaste)

questo funziona senza problemi, ma se ce' qualcosa che non và e posso migliorare dite pure!!!!

import java.util.Arrays;
import java.util.List;


public class ArrayInInput2 {
	public static void main(String args[]) {
		List lista =Arrays.asList (args);
		System.out.println("\nQuesti sono i Dati inseriti dall'utente: \n".toUpperCase()+lista);
		
		int x = args.length;
		int a = x;
		while (a <= x) {
			System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
			a++;
		}
	}
}
approfondendo, ho cercato di modificare il tutto cercando di dividere il programma in due, creando una classe apparte con un costruttore che facesse tutto il lavoro e li ho avuto dei problemi... che non tanto mi sono chiari.

classe 1: e questa funziona!

public class ContaInput {
	
	int x;
	int a;
	
	public int somma () {
	while (a <= x) {
			System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
			a++;
	}
	return somma();
	}
		
	
}
classe 2... non molto bene hehehhee

import java.util.Arrays;
import java.util.List;


public class ArrayInInput {
	public static void main(String args[]) {
		List lista =Arrays.asList (args);
		System.out.println("\nQuesti sono i Dati inseriti dall'utente: \n".toUpperCase()+lista);
		int NumeroArray = args.length;
		ContaInput conta = new ContaInput(NumeroArray);
		
			System.out.println(conta.somma());
		
	}
}
errore:

javac ArrayInInput.java
ArrayInInput.java:10: error: constructor ContaInput in class ContaInput cannot be applied to given types;
                ContaInput conta = new ContaInput(NumeroArray);
                                   ^
  required: no arguments
  found: int
  reason: actual and formal argument lists differ in length
1 error
in cosa sbaglio....

se mi date solo un indizio magari ci arrivo!!!
grassieee

19 Risposte

  • Re: Array while e vari

    Un errore l'ho trovato, nella " classe 1 " effettivamente non ho creato il costruttore:
    aggiornato codice con :
    
    public class ContaInput {
    	public ContaInput(int b, int d){
    	x=b;
    	a=d;
    }
    	int x;
    	int a;
    	
            public int somma () {
    	while (a <= x) {
    			System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
    			a++;
    	}
    	return somma();
    	}
    }
    
    ma l'errore si ripete con una variante: "found: int,int"
    
    >javac ArrayInInput.java
    ArrayInInput.java:12: error: constructor ContaInput in class ContaInput cannot be applied to given types;
                    ContaInput conta = new ContaInput(NumeroArray);
                                       ^
      required: int,int
      found: int
      reason: actual and formal argument lists differ in length
    1 error
    
  • Re: Array while e vari

    fabbio ha scritto:


    un errore l'ho trovato, nella " classe 1 " effettivamente non ho creato il costruttore:
    aggiornato codice con :
    
    public class ContaInput {
    	public ContaInput(int b, int d){
    	x=b;
    	a=d;
    }
       // ......
    
    ma l'errore si ripete con una variante: "found: int,int"
    
                    ContaInput conta = new ContaInput(NumeroArray);
                                       ^
      required: int,int
      found: int
    
    Hai messo un costruttore con 2 parametri .... e lo invochi con 1 solo argomento. Quale è il dubbio?
    Piuttosto: cosa sono e a cosa servono x (parametro b) e a (parametro d) ??

    Alcuni consigli:
    - cerca di dare sempre nomi sensati a variabili e metodi.
    - tieni i membri di una classe in quest'ordine: prima i campi (e possibilmente private se non ci ragioni ben precise), poi il/i costruttore poi i metodi.
  • Re: Array while e vari

    Niente scusate non ne vengo a capo... ci riprovero' piu' avanti approfodendo meglio.
    questo e' il risultato di mezza giornata buttata nel c....

    class1:
    
    public class ContaInput {
           public ContaInput(int x){}
           int x;
           int a;
           
                public int somma () {
           while (a <= x) {
                 System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
                 a++;
           }
           return somma() ;
           }
        }
    
    classe 2:
    
    import java.util.Arrays;
    import java.util.List;
    
    
    public class ArrayInInput {
    	public static void main(String args[]) {
    		List lista = Arrays.asList (args);		
    		int NumeroArray = args.length;
    		
    		ContaInput conta = new ContaInput(NumeroArray);
    		
    		System.out.println("\nQuesti sono i Dati inseriti dall'utente: \n".toUpperCase()+lista);
    		
    		System.out.println(conta.ContaInput());
    	    
    	}
    }
    
    errore:
    
    >javac ArrayInInput.java
    ArrayInInput.java:14: error: cannot find symbol
                    System.out.println(conta.ContaInput());
                                             ^
      symbol:   method ContaInput()
      location: variable conta of type ContaInput
    1 error
    
  • Re: Array while e vari

    Ragazzi, non capisco prorpio cosa non va.... dove' che sbaglio??
    
    public class ContaInput {
    	 private int a;
    	 public ContaInput (int x) {
    		 
    		while (a <= x) {
    			System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
    			a++;
    		}
    	 }
    	 
     }
    
    
    import java.util.Arrays;
    import java.util.List;
    
    
    public class ArrayInInput {
    	public static void main(String args[]) {
    		List lista = Arrays.asList (args);		
    		int NumeroArray = args.length;
    		
    		ContaInput conta = new ContaInput(NumeroArray);
    		
    		System.out.println("\nQuesti sono i Dati inseriti dall'utente: \n".toUpperCase()+lista);
    		
    		System.out.println(conta.ContaInput());
    	    
    	}
    }
    
    errore:
    
    
    >javac ArrayInInput.java
    ArrayInInput.java:14: error: cannot find symbol
                    System.out.println(conta.ContaInput());
                                                        ^
      symbol:   method ContaInput()
      location: variable conta of type ContaInput
    1 error
    
  • Re: Array while e vari

    Ma si può sapere dove è il metodo ContaInput() senza parametri???
    Come fai ad invocare un metodo che non esiste.
  • Re: Array while e vari

    Hai ragione.... non ho parole.... non ce' modulo!!!!

    ma nonostante tutto non ne vengo fuori!

    riparto dalla prima pagina del libro!!!!
  • Re: Array while e vari

    Ma che significa "non ne vengo fuori".

    Prova a ragionare...

    In una classe hai i seguenti elementi:
    variabili d'istanza
    variabili di classe
    costruttori
    metodi

    quello che c'è da sapere è che ogni classe ha un costruttore implicito di default che è così definito
    public NomeDellaClasse() {}
    quindi se io scrivo:
    public MiaClasse {
    }
    questo equivale a scrivere:
    public MiaClasse {
        public MiaClasse() { //costruttore di default implicitamente aggiunto dal compilatore
        }
    }
    Questo è vero solo se tu non scrivi esplicitamente un costruttore, infatti se scrivo:
    public MiaClasse {
        public MiaClasse(int x) { //costruttore che riceve un parametro di tipo int
        }
    }
    non ho più il costruttore MiaClasse() senza parametri, il compilatore non lo aggiunge.
    Questo non esclude il fatto che tu possa manualmente aggiungerlo (come puoi aggiungere quanti costruttore con quanti e quali tipi di parametri (Occhio però, perchè potresti avere dei problemini con l'overloading))

    Quando tu scrivi:
    System.out.println(conta.ContaInput());
    devi capire quindi che:
    1) Non hai nella classe ContaInput nessun costruttore ContaInput() senza parametri.
    2) Anche se avessi il costruttore ContaInput() non lo potresti invocare; nessun oggetto può effettuare una chiamata ai suoi costruttori. I costruttori servono per creare l'oggetto, infatti li "invochi" dopo la keyword new.
    3)quindi Java vede ContaInput() come un metodo normale che tu non ha scritto nella classe ContaInput.
  • Re: Array while e vari

    Ci sono xeon.... sto cercando di assimilare la tua lezione.

    -tutto chiaro sul fatto del costruttore default... se non lo creo JAVA me ne assegna uno, se lo creo devo usare il mio costruttore e a lui fare riferimento per passare dati al metodo del costruttore per fargli eseguire cio che deve fare. fin qui spero di aver capito almeno il concetto.

    - riporto codice postato nel primo pomeriggio, quindi questo ha senso oppure no?
    
    public class ContaInput {
        private int a;
        public ContaInput (int x) {
             while (a <= x) {
             System.out.println("\nIl totale dei Dati inseriti e': ".toUpperCase()+a);
             a++;
          }
        }
       
    }
    
    perche secondo me ho creato il costruttore, e il metodo.
    o almeno credo!!!
  • Re: Array while e vari

    Allora dopo un paio di orette finalmente sono riuscito nel mio intento.
    credo sia un po un accozzaglia perche' cio messo le mani 10 volte e non so come mai, ma funziona!
    dal mio punto di vista il programma quasi non fa una piega, ma per un occhio esperto sara' uno schifo!!

    classe 1:
    
    public class ContaDati {
    	public ContaDati (int r) {
    		riferimento=r;
    	}
    		int magazzino;
    		int riferimento;
    		
    		public int somma() {
    			int somma;
    			somma=riferimento;
    			while (riferimento <= magazzino){
    				System.out.println(riferimento);
    				riferimento++;
    			}
    			return somma;
    		}
    }
    
    classe 2:
    
    import java.util.Arrays;
    import java.util.List;
    
    public class InputDati {
    	public static void main(String args[]) {
    		List lista = Arrays.asList (args);
    		System.out.println("\nQuesti sono i Dati inseriti dall'utente: \n".toUpperCase()+lista);
    		
    		ContaDati dati = new ContaDati (args.length);
    		
    		System.out.println(dati.somma());
    	}
    }
    
    ditemi voi che robaccia e' venuta fuori!!!
    pero' funziona, non so se essere contento o meno!!!
  • Re: Array while e vari

    Diciamo che il codice funziona.

    Comunque, il costruttore non serve per passare dei dati per svolgere delle operazioni.
    Il costruttore, come dice il nome, serve a costruire l'oggetto, quindi i parametri che passi sono utili, di solito, per inizializzare lo stato interno dell'oggetto.
    Il costruttore non è quindi un metodo come tutti gli altri.

    Per le operazioni devi usare i metodi.

    Un'altra cosa.
    Per mantenere il codice leggibile è preferibile anteporre le variabili d'istanza subito dopo la definizione della classe e prima del costruttore.
    Inoltre se vuoi che le tue variabili non siano visibili dall'esterno dovresti usare il modificatore private.

    Nella tua classe ContaDati, hai due variabili d'istanza, riferimento e magazzino, che dovrebbero essere scritte prima del costruttore e con modificatore private. Inoltre per quanto riguarda la variabile magazzino, ti sei accorto che è sempre zero, che utilità ha per l'oggetto?
  • Re: Array while e vari

    Si, hai ragione... il tuo discorso non fa una piega.
    sopratutto adesso che mi sono reso conto che effettivamente " magazzino " e' sempre a zero e di nessuna utilita'.
    ma mi chiedo, senza quella variabile "magazzino" (se pur a zero) con cosa avrei potuto confrontare la variabile " riferimento " ??


    - un altra cosa, mi sto accorgendo che: libri/howto/manuali e quant'altro, in queste cose contano molto.......
    ma mai quanto l'esperienza fatta sul campo!!
  • Re: Array while e vari

    Avresti potuto confrontarlo direttamente con 0.
    Comunque per quanto riguarda l'altra variabile, riferimento, non ha un nome significativo. A cosa serve quella variabile? Dal nome non si capisce.

    Ti posso ancora far osservare che nel metodo somma():
    1) la variabile somma è inutile.
    2) entri nel while solo (guardando nel main cosa passi al costruttore) se non passi nessun argomento al programma.
    3) il metodo somma ti restituisce sempre lo stesso valore che è uguale sempre a riferimento.

    Quindi mi chiedo a cosa serve quel metodo somma()?
  • Re: Array while e vari

    Si, hai ragione.......la variabile somma non serave a niente... tolta e tutto funziona,
    ovviamente nel return ho messo " riferimento ".

    - mi chiedi a che serve il metodo somma() quando avrei potuto stampare il valore di
    " args.length " per ottenere lo stesso risultato per sapere di quanti elementi fosse composto
    "args".... era solo per esercitarmi con i vari cicli e richiamare i metodi dei costruttori.

    che poi io abbia fatto un po di casini hai pienamente ragione, ma ci prendero' la mano.
    spero solo che non vi stanchiate di darmi dritte!!!

    -per i nomi e i significati da dare alle variabili, ai metodi ecc eccc sono davvero scarso e poca inventiva.... ma migliorero'!!
  • Re: Array while e vari

    Dopo averci ragionato ancora un po, mika ho capito bene questo:

    2) entri nel while solo (guardando nel main cosa passi al costruttore) se non passi nessun argomento al programma.
    3) il metodo somma ti restituisce sempre lo stesso valore che è uguale sempre a riferimento.
Devi accedere o registrarti per scrivere nel forum
19 risposte