Dimensioni di un rettangolo nel piano cartesiano

di il
6 risposte

Dimensioni di un rettangolo nel piano cartesiano

Ciao, a tutti; sono abbastanza inesperto in java e attualmente sono in fase esercitazioni. Mi sapreste aiutare con questo piccolo e (credo) molto banale programmino che sto facendo? non è un esercizio preso da un testo, bensì una prova a cui mi sto sottoponendo. ora vi posto il codice, premetto che il programma dovrebbe ricevere in input tramite scanner le coordinate cartesiane di un rettangolo e, in automatico tramite metodi da me definiti, trovare base, altezza, perimetro e area. Il problema è questo: ho definito i metodi vari(qui ce n'è solo uno per fare prima ma so che dovrebbero essere uno per ogni "funzione" che il programma deve avere), ma una volta chiamato il metodo nel main il risultato che mi dà in output anzicchè i valori desiderati sono un gruppo di zeri(uno zero per base, uno per altezza...). tutto il programma funziona, solo il metodo dà problemi, quindi mi chiedevo se fosse un problema del tipo visibilità e passaggio errato dei parametri oppure se il metodo fosse scritto male come logica. ringrazio infinitamente chiunque mi aiuterà e chiedo scusa se violo inavvertitamente qualche regola(non sono pratico nei forum). grazie mille

import java.util.Scanner;
public class Rettangolo {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int i, j;
		double base = 0, altezza = 0, perimetro = 0, area = 0;
		double[][] coordinate = new double[4][2];
		System.out.println("inserisci le coordinate del rettangolo,"
				+ "\nogni coordinata è composta da 2 valori."
				+ "\nLe prime 2 coordinate sono i vertici della base"
				+ "\nmentre le altre 2 coordinate sono i vertici dell'altezza");
		for(i=0; i<4; i++) {
			for(j=0; j<2; j++) {
			System.out.print("inserisci il valore [" + i + "]["+ j + "]: ");
			coordinate[i][j] = scanner.nextDouble();
			}
		}
		System.out.println("le coordinate da te inserite sono: ");
		for(i=0; i<4; i++) {
			for(j=0; j<2; j++) {
				System.out.println( coordinate[i][j]);
			}
		}
		System.out.println("\nbase = x2-x1");
		System.out.println("x1=(" + coordinate[0][0] + ";" + coordinate[0][1] + ")");
		System.out.println("x2=(" + coordinate[1][0] + ";" + coordinate[1][1] + ")");
		System.out.println("altezza = y2-y1");
		System.out.println("x2=(" + coordinate[2][0] + ";" + coordinate[2][1] + ")");
		System.out.println("x2=(" + coordinate[3][0] + ";" + coordinate[3][1] + ")");
		Rettangolo.getDimensioni(area);
	}
	
	public static void getDimensioni(double area) {
		double[][] punti = new double[4][2];
		double perimetro;
		double tmp = Math.pow((punti[3][0] - punti[2][0]), 2);
		double tmp1 = Math.pow((punti[3][1] - punti[2][1]), 2);
		double altezza = Math.sqrt(tmp + tmp1);
		double tmp2 = Math.pow((punti[1][0] - punti[0][0]), 2);
		double tmp3 = Math.pow((punti[1][1] - punti[0][1]), 2);
		double base = Math.sqrt((tmp2 + tmp3));
		area = base * altezza;
		perimetro = (base * 2) + (altezza * 2);
		System.out.println("base= " + base);
		System.out.println("altezza= " + altezza);
		System.out.println("perimetro= " + perimetro);
		System.out.println("area= " + area);
	}
}

6 Risposte

  • Re: Dimensioni di un rettangolo nel piano cartesiano

    fausto94 ha scritto:


    ma una volta chiamato il metodo nel main il risultato che mi dà in output anzicchè i valori desiderati sono un gruppo di zeri
    La variabile 'punti' in getDimensioni non ha nulla a che fare con la variabile 'coordinate' del main. Se non fai in modo che getDimensioni possa usare il double[][] popolato nel main, non vedo come puoi calcolare alcunché ...

    Al momento a getDimensioni passi un area che è inizializzata a 0. Quindi così come è non ha alcun senso.
  • Re: Dimensioni di un rettangolo nel piano cartesiano

    andbin ha scritto:


    La variabile 'punti' in getDimensioni non ha nulla a che fare con la variabile 'coordinate' del main. Se non fai in modo che getDimensioni possa usare il double[][] popolato nel main, non vedo come puoi calcolare alcunché ...

    Al momento a getDimensioni passi un area che è inizializzata a 0. Quindi così come è non ha alcun senso.
    ok, grazie mille per la risposta. è più o meno ciò che mi aspettavo. sto provando a risolverlo passando al metodo 'getDimensioni' non più un solo parametro 'area' ma anche un array di tipo double, così alla chiamata posso specificare come parametri anche l'array 'coordinate'. in pratica pensavo di fare
    public static void getDimensioni(double area, double[][] coordinate) {
    		coordinate = new double[4][2];
    per il metodo getDimensioni e nel main ho cambiato la chiamata in questo modo
    Rettangolo.getDimensioni(area, coordinate[4][2]);
    l'unico problema è che così mi dà il seguente errore:
    The method getDimensioni(double, double[][]) in the type Rettangolo is not applicable for the arguments
    (double, double)
    sinceramente non capisco il problema di questo errore: è come se non vedesse come un array quel coordinate[2][4]....mi daresti un consiglio su come procedere per favore, anche in altri modi? grazie ancora
  • Re: Dimensioni di un rettangolo nel piano cartesiano

    fausto94 ha scritto:


    public static void getDimensioni(double area, double[][] coordinate) {
    		coordinate = new double[4][2];
    Innanzitutto non ha senso avere un parametro 'area'. L'area la calcoli nel metodo ... non la devi passare.

    Quindi il metodo può benissimo essere:

    public static void getDimensioni(double[][] coordinate)

    Come seconda cosa, in getDimensioni NON devi istanziare l'array. Viene già istanziato nel main, devi solo passare il reference a getDimensioni.

    E per passare tale reference basta solo passare coordinate (la variabile del main).
  • Re: Dimensioni di un rettangolo nel piano cartesiano

    andbin ha scritto:


    Innanzitutto non ha senso avere un parametro 'area'. L'area la calcoli nel metodo ... non la devi passare.

    Quindi il metodo può benissimo essere:

    public static void getDimensioni(double[][] coordinate)

    Come seconda cosa, in getDimensioni NON devi istanziare l'array. Viene già istanziato nel main, devi solo passare il reference a getDimensioni.

    E per passare tale reference basta solo passare coordinate (la variabile del main).
    ti ringrazio tantissimo ma più leggo più mi sento dislessico.. la prima parte è chiarissima, ma il secondo punto non lo colgo.. "per passare il reference al metodo basta passare coordinate".. ho letto esempi in giro, ripassato il capitolo sui reference e il passaggio dei parametri.. non afferro purtroppo
  • Re: Dimensioni di un rettangolo nel piano cartesiano

    fausto94 ha scritto:


    "per passare il reference al metodo basta passare coordinate".. ho letto esempi in giro, ripassato il capitolo sui reference e il passaggio dei parametri.. non afferro purtroppo
    Nel main hai una variabile chiamata 'coordinate', di tipo double[][] . L'array è istanziato e popolato.

    Se il getDimensioni riceve un double[][] allora nel main:

    getDimensioni(coordinate);


    Tutto qui.
  • Re: Dimensioni di un rettangolo nel piano cartesiano

    Ti ringrazio infinitamente, finalmente fila tutto liscio come l'olio e ho capito cosa intendevi col passare il reference. grazie ancora.
Devi accedere o registrarti per scrivere nel forum
6 risposte