Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49

    [JAVA] Somma a elementi alterni


    questo programma prende in input una sequenza di interi,memorizzandola in un array, e ne calcola la somma ad elementi alterni.
    Cioè: input->{1,4,9,16,9,7,4,9,11} output è -> 1-4+9-16+9-7+4-9+11 = -2

    questo è quello che ho fatto ma in output ho sempre 0.
    codice:
    public class Somma 
    {
    	public Somma()
    	{
    		sum = 0;
    		asum = 0;
    	}
    	
    	public void sumAlternate(int n)
    	{
    		int[] array = new int[n];
    		for(int i=1;i<array.length;i+=2)
    		{
    		     for(int j=0;j<array.length;j+=2)
                                         asum = array[i] - array[j];
    		}
    	}
    	
    	public int getSumAlternate()
    	{
    		return asum;
    	}
    	
    	public void sumNormal(int n)
    	{
    		int[] array = new int[n];
    		for(int i=0;i<array.length;i++)
    		{
    			sum = sum + array[i];
    		}
    	}
    	
    	public int getSumNormal()
    	{
    		return sum;
    	}
    
    	private int sum;
    	private int asum;
    }
    codice:
    import java.util.Scanner;
    public class SommaTest 
    {
    	/**
    	 * Programma che effettua la somma ad elementi alterni.
    	 */
    	public static void main(String[] args) 
    	{
    		Scanner in = new Scanner(System.in);
    		Somma sum = new Somma();
    		
    		System.out.println("Inserisci dei numeri interi(Max 10)");
    		boolean done = false;
    		while(!done)
    		{
    			System.out.println("Premi Q per terminare.");
    			String input = in.next();
    			if(input.equalsIgnoreCase("Q"))
    				done = true;
    			else
    			{
    				int a = Integer.parseInt(input);
    				sum.sumAlternate(a);
    				sum.sumNormal(a);
    				done = false;
    			}
    				
    		}
    		
    		System.out.println("La somma normale è: "+ sum.getSumNormal());
    		System.out.println("La somma alternata è: "+ sum.getSumAlternate());
    	}
    
    }
    Il programma funziona senza l'inserimento da tastiera dei numeri, cioè senza la classe Somma ma solo con la classe SommaTest.Infatti il metodo sumAlternate contiene la procedura che ho testato e funziona solo con il main.
    Perchè adesso non va più?
    Grazie a tutti per una risposta

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Secondo me fai troppa confusione:
    1) nei cicli di somma e sottrazione.
    2) azzerando l'array prima di eseguire le somme

    Perché poi innesti un ciclo nell'altro ?
    Così funziona :

    codice:
        int[] array = {1, 4, 9, 16, 9, 7, 4, 9, 11}; 
        int asum = 0;
        int sum = 0;
    
        public void sumNormal(int n) {
     
            for (int j = 0; j < array.length; j += 1) {
                sum = sum + array[j];
            }
    
        }
    
        public void sumAlternate(int n) {
    
             for (int j = 0; j < array.length; j += 2) {
                asum = asum + array[j];
            }
            for (int i = 1; i < array.length; i += 2) {
                asum = asum - array[i];
            }
        }
    Ciao, Brainjar

  3. #3
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    ciao Brainjar
    i valori li devo passare da tastiera ad un array e quindi il problema principale penso sia quello,non devo inizializzare un array.

    Adesso mi ci metto un po e ti faccio sapere comunque grazie!!!

  4. #4
    Utente di HTML.it L'avatar di eoj
    Registrato dal
    Feb 2007
    Messaggi
    49
    Finalmente ho risolto........
    Posto il codice a chi ne ha bisogno.
    codice:
    public class Somma 
    {
    	public Somma(int taglia)
    	{
    		sum = 0;
    		asum = 0;
    		array = new int[taglia];
    	}
    	
    	public void sumAlternate(int[] n)
    	{
    	    for(int i=1;i<array.length;i+=2)
    	    {  
                         for(int j=0;j<array.length;j+=2)
    		      asum = n[i] - n[j];
    	    }
    	}
    	
    	public int getSumAlternate()
    	{
    		return asum;
    	}
    	
    	public void sumNormal(int[] n)
    	{	
    		for(int i=0;i<array.length;i++)
    		{
    			sum = sum + n[i];
    		}
    	}
    	
    	public int getSumNormal()
    	{
    		return sum;
    	}
    
    	private int sum;
    	private int asum;
    	private int[]array;
    }
    codice:
    import java.util.Scanner;
    public class SommaTest 
    {
    	/**
    	 * Programma che effettua la somma ad elementi alterni e normale.
    	 */
    	public static void main(String[] args) 
    	{
    		Scanner in = new Scanner(System.in);
    		System.out.println("Inserisci la taglia dell'array: ");
    		int size = in.nextInt();
    		Somma sum = new Somma(size);
    		
    		int[] a = new int[size];
    		System.out.println("Inserisci i "+size+" valori.");
    		int i=0;
    		while(i<size)
    		{
    			int input = in.nextInt();
    			a[i] = input;
    			i++;
    		}
    		sum.sumNormal(a);
    		sum.sumAlternate(a);
    		
    		System.out.println("La somma normale è: "+ sum.getSumNormal());
    		System.out.println("La somma alternata è: "+ sum.getSumAlternate());
    	}
    }

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.