Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    185

    errore di referenza

    codice:
    import java.util.Scanner;
    public class mergeSort {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner sc = new Scanner(System.in);
    			int[] v;
    			int i, n;
    			
    			System.out.println("Inserisci la lunghezza del vettore v:   ");
    			n=sc.nextInt();
    			
    			v = new int[n];
    			
    			for(i=0;i<n;i++)
    			{
    				System.out.println("Digita l'elemento di indice " + i);
    				v[i] = sc.nextInt();
    			}
    			
    			ordina(v,0,n-1);
    			
    			System.out.println("Vettore ordinato:  ");
    			
    			for(i=0;i<n;i++)
    			{
    				System.out.println(v[i]+"");
    			}
    			System.out.println();
    	}
    	
    	void ordina(int[] a, int e, int u)
    	{
    		int m;
    		
    		if(e!=u)
    		{
    			m=(e+u)/2;
    			
    			ordina(a,e,m);
    			ordina(a,m+1,u);
    			fondi(a,e,m,u);
    		}
    	}
    	
    	void fondi(int[] a, int e, int m, int u)
    	{
    		int[] b;
    		int i, j, k;
    		
    		b = new int[u-e+1];
    		i=e;
    		j=m+1;
    		k=0;
    		while(i<=m && j<=u)
    		{
    			if (a[i] <= a[j])
    			{
    				b[k++]=a[i++];
    			}else{
    				b[k++]=a[j++];
    			}
    		}
    		
    		while(i<=m)
    		{
    			b[k++]=a[i++];
    		}
    		
    		while(j<=u)
    		{
    			b[k++]=a[j++];
    		}
    		
    		for(k=0;k<=u-e;k++)
    		{
    			a[k+e]=b[k];
    		}
    	}
    
    }
    l'errore ce l'ho quando nel main richiamo la funzione ordina. Dice che da un metodo statico non posso richiamare un metodo non statico come ordina.
    Ho provato a risolvere mettendo private static void ordina, e funziona, ma non capisco il concetto...cioè io ho fatto una scorciatoia..., ma il concetto che ci sta dietro quale è? c'erano altri modi di risolvere?
    Grazie a tutti...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il titolo è inadeguato e la sezione è sbagliata (ce n'è una appositamente dedicata a Java).
    Ho spostato la discussione nell'area appropriata e corretto il titolo. In futuro provvedi tu.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Il "concetto" che intendi tu è alla base della programmazione ad oggetti cioè Classe/Oggetto...Incapsulamento etc...
    Un post non basterebbe minimamente a colmare tale lacune.
    Cmq per quanto riguarda la tua domanda specifica è corretto che ti venga segnalato tale errore in quanto da un metodo statico (alla buona diciamo che è un metodo che nn ha bisogno che l'oggetto/classe in cui risiede venga instanziata) ovviamente non può riferirsi/invocare a nessuna proprietà/metodo che ha bisogno di essere stanziato.
    In particolare in metodo main (entry point per l'applicazione) deve essere per forza statico (altrimente la jvm come farebbe a richiamartelo....) e quindi può effettuare operazioni solo su oggetti statici (metodi/proprietà) oppure costruire oggetti al suo interno per poi invoare i metodi su di essi.
    Per esempio il tuo problema poteva essere risolto banalmente costruendoti un oggetto "mergeSort" (il nome della classe dovrebbe essere sempre con la prima lettera in maiuscolo...) e invocando su di esso il metodo ordina.
    codice:
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		mergeSort mergeSort = new mergeSort();//creo l'oggetto
    		Scanner sc = new Scanner(System.in);
    			int[] v;
    			int i, n;
    			
    			System.out.println("Inserisci la lunghezza del vettore v:   ");
    			n=sc.nextInt();
    			
    			v = new int[n];
    			
    			for(i=0;i<n;i++)
    			{
    				System.out.println("Digita l'elemento di indice " + i);
    				v[i] = sc.nextInt();
    			}
    			
    			mergeSort.ordina(v,0,n-1);
    			
    			System.out.println("Vettore ordinato:  ");
    			
    			for(i=0;i<n;i++)
    			{
    				System.out.println(v[i]+"");
    			}
    			System.out.println();
    	}

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.