Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [java]problema molto niubbo

    per chi proviene da vb, l'impatto con il linguaggio java è indubbiamente traumatico. All'università si studia java e quindi studiamo java.....
    Il problema è il seguente:Scrivete un programma che legga una sequenza di numeri interi, memorizzandola in un array e ne calcoli la somma a elementi alterni.
    Per esempio se il programma viene eseguito fornendo questi dati:
    1 4 5 7
    il programma deve esegure:
    1-4+5-7


    allora prima di arrivare alla somma di elementi alterni (l'algoritmo ce l'ho ben presente (sottrarre i numeri in posizione dispari e sommare i numeri in posizione pari), ma più che altro l'implementazione, o meglio la codifica nel nuovo linguaggio, mi sta creando un po' di problemi.
    Per prova ho fatto questo:

    codice:
    import java.util.Scanner;
    public class SommaAlterna
    {
    	private int[] arrayNum=new int[1000];
    	
    	private SommaAlterna(int nElem)
    	{
    		int[] arrayNum=new int[nElem];
    		System.out.print ("E' stato creato un vettore di " + nElem + " elementi");		
    	}
    	
    	public void Valorizza (int vettore[], int posizione)
    	{
    		System.out.print ("Inserisci l'elemento di posizione " + posizione);		
    		Scanner inVal=new Scanner (System.in);
    		int valore=inVal.nextInt();
    		vettore[posizione]=valore;
    		System.out.print ("In posizione " + posizione+ " è stato inserito l'elemento "+ valore);		
    		
    	}
    		
    	public static void main (String[] args)
    	{
    		Scanner inDim=new Scanner (System.in);
    		System.out.print ("Inserisci il numero di elementi del vettore ");
    		int num=inDim.nextInt();
    		SommaAlterna Alterna=new SommaAlterna(num);
    		int i=0;
    		for (i=0;i<=num;i++)
    		{
    				
    			Alterna.Valorizza(arrayNum[], i+1);
    		}
    	}
    }
    In questo programma ho errore all'ultima riga Alterna.Valorizza(arrayNum[], i+1);:
    1) '.class' expected
    2)')' expected
    cosa significa???

    quello che non riesco a ficcarmi in testa è, per ogni programma, cosa conviene dichiarare prima di creare il costruttore che abbia lo stesso nome della classe. E inoltre, nel costruttore che ha lo stesso nome della classe (che poi sarebbe il tipo che vado a creare nel main) cosa mi conviene dichiarare??

    Scusate se vi pongo tutte ste domande ma penso che il parere di più utenti esperti dal punto di vista pratico, valgano più delle spiegazioni di un prog esperto dal punto di vista teorico (e poco pratico)

    ah, non so se può servire, come editor uso JCreatore (è quello che è installato sui pc dell'uni).

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    vuol dire che si aspetta un'istanza di un oggetto e che non capisce cosa gli stai dando

    se definisci arrayNum globale non puoi usarlo in un metodo statico

    int[] arrayNum = new int[num+1];
    for (i=0; i<=num; i++) {
    Alterna.Valorizza(arrayNum, i);
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Ciao
    Posta tutto l'errore di compilazione che così non si capisce.
    Occhio e croce credo comunque che ci sia un errore nel passaggio di parametri alla funzione valorizza, cioè l'array lo devi passare senza parentesi quadre.

    ') expected' vuol dire che il parser, prima della compilazione, si aspettava di trovare una chiusura di parentesi e invece ha trovato qualcosaltro.

    Comunque posta tutti gli errori di compilazione.

    quello che non riesco a ficcarmi in testa è, per ogni programma, cosa conviene dichiarare prima di creare il costruttore che abbia lo stesso nome della classe. E inoltre, nel costruttore che ha lo stesso nome della classe (che poi sarebbe il tipo che vado a creare nel main) cosa mi conviene dichiarare??
    Qui non ho capito cosa intendi. IN genere in cima alla classe si dichiarano i campi (le variabili globali alla classe) dell'oggetto...
    azz non ho proprio capito cosa intendi

    spiegati meglio

    edit: mica me ne ero accorto che l'array non era dichiarato :/

  4. #4
    allora grazie a tutti per l'interessamento che avete dimostrato.
    Procediamo con ordine:

    @floyd: l'errore che mi dava era proprio dovuto al fatto che passavo come parametro l'array con le parentesi quadre.
    Adesso sembra funzionare ma, se metto come numero di elementi 3, l'iterazione viene eseguita per 4 volte solo che poi ottengo l'errore (arrayIndexOutOfBound) quando cerca di andare a trovare l'elemento del vettore di posizione 4 che chiaramente non esiste.

    @ Gil Mour: quello che intendevo dire, magari non mi sono spiegato bene, è prima di dichiarare il costruttore con il nome della classe, cosa mi conviene dichiarare??
    Tu mi hai risposto i campi globali della classe ma, vuoi perchè vengo da una impostazione Pascal e nell'ultimo periodo ho sviluppato solo in vb6 e vb.net2k3 , proprio non riesco ad individuarli.
    Spero si sia capito....

  5. #5
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    se hai scritto come dicevo io non dovrebbe dare errori
    comunque
    di solito gli array si scorrono con
    for (i=0; i<array.length; i++)

  6. #6
    perfetto.
    Grazie della dritta riguardo array.length. ADesso funziona tutto.
    Come pensavo l'esperienza pratica è ben diversa da quella teorica...

  7. #7
    Originariamente inviato da motogpdesmo16


    @ Gil Mour: quello che intendevo dire, magari non mi sono spiegato bene, è prima di dichiarare il costruttore con il nome della classe, cosa mi conviene dichiarare??
    Tu mi hai risposto i campi globali della classe ma, vuoi perchè vengo da una impostazione Pascal e nell'ultimo periodo ho sviluppato solo in vb6 e vb.net2k3 , proprio non riesco ad individuarli.
    Spero si sia capito....
    porto up perchè vorrei chiarimenti da gilmour.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da motogpdesmo16
    perfetto.
    Grazie della dritta riguardo array.length. ADesso funziona tutto.
    Come pensavo l'esperienza pratica è ben diversa da quella teorica...
    Beh... qui non c'entra molto la pratica, quanto la teoria: stavi scorrendo un array di N elementi su N+1 elementi:
    codice:
    for (i=0;i<=num;i++)
    {
    	Alterna.Valorizza(arrayNum[], i+1);
    }
    Se l'array è composto di 3 elementi, tu lo scorri in questo modo:
    Elemento in posizione 0 (i = 0)
    Elemento in posizione 1 (i = 1)
    Elemento in posizione 2 (i = 2)
    Elemento in pozizione 3 (i = 3)

    I campi globali di una classe sono tutte le variabili (siano esse di tipo primitivo o Oggetti) che vengono dichiarate a livello di classe (ovvero al di fuori di qualunque metodo).
    In pratica, i corrispondenti Pascal delle variabili dichiarate nella sezione VAR più esterna:
    codice:
    Program Programma;
    USES ...;
    VAR   mioInt : Integer;
          miaStringa : String[20];
          ...
    Begin
       ...
    End.
    [/b]
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.