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

    [JAVA]Programma equazione 2° grado

    premetto a tutti che sono più che neofita su questo tipo di linguaggio (Praticamente ho ripreso a scrivere su questo tipo di compilatore Like Pascal dopo 3 anni di Visual Basic....).
    Il codice del mio primo programmino (dopo il tradizionale "Hello World" propedeutico) è il seguente:

    codice:
    import java.util.Scanner;
    public class equazione
    {
    	
    	private int a;
    	private int b;
    	private int c;		
    	private int discr;
    	
    	private float x1;
    	private float x2;
    	
    	public  equazione (int ax, int bx, int cx)
    	{
    		a=ax;
    		b=bx;
    		c=cx;
    		discr=(b * b) - (4 * a * c);
    	}	
    	
    	public double getSolution1()
    	{
    		return ((-b)+(Math.sqrt(discr)))/(2*a);		
    	}
    	
    	public double getSolution2 ()
    	{	
    		return ((-b)-Math.sqrt(discr))/(2*a);
    	}	
    	
    	
    	public static void main (String[] args)
    	{
    		int discr=0;
    		Scanner inA= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di secondo grado: ");
    		int a=inA.nextInt();
    		Scanner inB= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di primo grado: ");
    		int b=inB.nextInt();
    		Scanner inC= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine noto: ");
    		int c=inC.nextInt();
    		equazione equa=new equazione (a,b,c);
    		System.out.println("Discriminante: D= " + discr) ;
    		System.out.println("Soluzione1: x1= " + equa.getSolution1 ());
    		System.out.println("Soluzione2: x2= " + equa.getSolution2 ());	
    	}
    }
    Nella variabile discr (evidenziata di rosso) mi appare sempre 0, nonostante venga calcolata ed utilizzata correttamente per trovare le soluzioni (che poi sono quelle giuste). DOve sbaglio??
    Scusate se è una domanda banale, però, come detto, dopo 3 anni di VB il cervello è un po' "arrugginito" nei confronti di questo tipo di linguaggi di programmazione.
    Grazie.

  2. #2

    Re: [JAVA]Programma equazione 2° grado

    Originariamente inviato da motogpdesmo16
    premetto a tutti che sono più che neofita su questo tipo di linguaggio (Praticamente ho ripreso a scrivere su questo tipo di compilatore Like Pascal dopo 3 anni di Visual Basic....).
    Il codice del mio primo programmino (dopo il tradizionale "Hello World" propedeutico) è il seguente:

    codice:
    import java.util.Scanner;
    public class equazione
    {
    	
    	private int a;
    	private int b;
    	private int c;		
    	private int discr;
    	
    	private float x1;
    	private float x2;
    	
    	public  equazione (int ax, int bx, int cx)
    	{
    		a=ax;
    		b=bx;
    		c=cx;
    		discr=(b * b) - (4 * a * c);
    	}	
    	
    	public double getSolution1()
    	{
    		return ((-b)+(Math.sqrt(discr)))/(2*a);		
    	}
    	
    	public double getSolution2 ()
    	{	
    		return ((-b)-Math.sqrt(discr))/(2*a);
    	}	
    	
    	
    	public static void main (String[] args)
    	{
    		int discr=0;
    		Scanner inA= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di secondo grado: ");
    		int a=inA.nextInt();
    		Scanner inB= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di primo grado: ");
    		int b=inB.nextInt();
    		Scanner inC= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine noto: ");
    		int c=inC.nextInt();
    		equazione equa=new equazione (a,b,c);
    		System.out.println("Discriminante: D= " + discr) ;
    		System.out.println("Soluzione1: x1= " + equa.getSolution1 ());
    		System.out.println("Soluzione2: x2= " + equa.getSolution2 ());	
    	}
    }
    Nella variabile discr (evidenziata di rosso) mi appare sempre 0, nonostante venga calcolata ed utilizzata correttamente per trovare le soluzioni (che poi sono quelle giuste). DOve sbaglio??
    Scusate se è una domanda banale, però, come detto, dopo 3 anni di VB il cervello è un po' "arrugginito" nei confronti di questo tipo di linguaggi di programmazione.
    Grazie.
    E' sicuro che ti dia sempre 0 perche' la variabile discr l'hai definita come variabile d'istanza della classe equazione ma poi la ridefinisci anche nel main come variabile locale. Le cause sono due quindi:
    1)Da un metodo statico come lo è il main() non puoi accedere a variabili d'istanza della classe,
    2)Se anche discr fosse stata dichiarata statica, la reinizializzazione nel corpo del main() faceva in modo che la visibilità ci fosse soltanto per quella ridefinita nel main. E' un aspetto dell'ambiente delle classi di Java

  3. #3

    Re: Re: [JAVA]Programma equazione 2° grado

    O meglio il punto 2 singifica che la prima variabile a essere utilizzata tra le due e' quella ridefinita nel corpo del metodo main(). Infatti a parità di nomi di variabili si potrebbe definire un ordine di visibilità(dal più visibile al meno visibile):
    1)variabili locali di un metodo
    2)variabili statiche
    3)variabili d'istanza di una classe


    Spero di esser stato chiaro, se vuoi chiarimenti, chiedi.

  4. #4

    Re: [JAVA]Programma equazione 2° grado

    Originariamente inviato da motogpdesmo16
    premetto a tutti che sono più che neofita su questo tipo di linguaggio (Praticamente ho ripreso a scrivere su questo tipo di compilatore Like Pascal dopo 3 anni di Visual Basic....).
    Il codice del mio primo programmino (dopo il tradizionale "Hello World" propedeutico) è il seguente:

    codice:
    import java.util.Scanner;
    public class equazione
    {
    	
    	private int a;
    	private int b;
    	private int c;		
    	private int discr;
    	
    	private float x1;
    	private float x2;
    	
    	public  equazione (int ax, int bx, int cx)
    	{
    		a=ax;
    		b=bx;
    		c=cx;
    		discr=(b * b) - (4 * a * c);
    	}	
    	
    	public double getSolution1()
    	{
    		return ((-b)+(Math.sqrt(discr)))/(2*a);		
    	}
    	
    	public double getSolution2 ()
    	{	
    		return ((-b)-Math.sqrt(discr))/(2*a);
    	}	
    	
    	
    	public static void main (String[] args)
    	{
    		int discr=0;
    		Scanner inA= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di secondo grado: ");
    		int a=inA.nextInt();
    		Scanner inB= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine di primo grado: ");
    		int b=inB.nextInt();
    		Scanner inC= new Scanner (System.in);
    		System.out.print ("Inserisci il coefficiente del termine noto: ");
    		int c=inC.nextInt();
    		equazione equa=new equazione (a,b,c);
    		System.out.println("Discriminante: D= " + discr) ;
    		System.out.println("Soluzione1: x1= " + equa.getSolution1 ());
    		System.out.println("Soluzione2: x2= " + equa.getSolution2 ());	
    	}
    }
    Nella variabile discr (evidenziata di rosso) mi appare sempre 0, nonostante venga calcolata ed utilizzata correttamente per trovare le soluzioni (che poi sono quelle giuste). DOve sbaglio??
    Scusate se è una domanda banale, però, come detto, dopo 3 anni di VB il cervello è un po' "arrugginito" nei confronti di questo tipo di linguaggi di programmazione.
    Grazie.
    Non ho testato il tuo codice ma da quel che vedo è un banale problema di scope sovrapposti delle variabili. Tu hai due variabili che si chiamano discr e che sono dello stesso tipo (int), una è una variabile di istanza della classe
    codice:
            ........
    	private int a;
    	private int b;
    	private int c;		
    	private int discr;
    	
    	private float x1;
    	private float x2;
            ........
    l'altra è una variabile locale al metodo main:
    codice:
    public static void main (String[] args)
    	{
    		int discr=0;
                ........
    Se tu stampi la variabile chiamandola solo discr quella che ti viene stampata è quella locale al metodo,che come vedi viene inizializzata a zero e tale rimane.Se vuoi accedere alla variabile discr di istanza della classe lo puoi fare riferendola con this.discr ma solo in un metodo non statico, (quindi se lo fai nel main ti da errore). Spero di aver fugato i tuoi dubbi ,se qualcosa non è chiara chiedi pure comunque
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Ops..post contemporaneo
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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.