Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    Prime prove con java e Netbeans 6.1

    Salve, mi sto avvicinando al linguaggio java ed in particolare alle interfacce grafiche. Netbeans 6.1 si sta rivelando molto semplice ed intuitivo per creare programmini del genere. Per allenamento ho creato un programma che fa delle operazioni con i numeri complessi (che avevo già implementato in C senza GUI). Il problema è che i risultati sono sballati. Questa è una parte dell'interfaccia grafica (in pratica trasforma un numero complesso dalla forma algebrica x+jy a quella polare modulo /_ fase, utilizzata spesso in elettrotecnica):



    Cliccando due volte sul bottone mi si apre la parte di codice relativa all'Action performed dove devo inserire l'azione relativa al bottone, ecco qua:




    in pratica io acquisisco le stringhe dei primi due campi che rappresentano la parte rale e quella immaginaria e le trasformo in double assegnando i valori a x e y. Poi faccio i quadrati di x e y, li sommo e faccio la radice (cioè mi sono trovato il modulo r). Per quanto riguarda f cioè la fase faccio l'arcotangente del rapporto y/x e visto che il valore è in radianti lo trasformo nell'istruzione successiva in gradi. Infine stampo i valori nei relativi campi. Perchè i risultati vengono sballati?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Forum sbagliato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Si è vero scusatemi. Potete spostare la discussione? Grazie

  4. #4
    probabilmente perchè nella text fileld ti ci entrano così tanti numeri che vedi gli ultimi,
    anche perchè ho provato ora il tuo codice e funziona:
    prova a fare un arrotondamento alla seconda cifra decimale e vedi se ti tornano i numeri
    di modulo e fase convertiti
    ( importa "java.math.BigDecimal;" ed esegui il codice così modificato: )

    codice:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
        double x,y,f,r;
        
        x = Double.parseDouble(jTextField1.getText());
        y = Double.parseDouble(jTextField2.getText());
        
        x = Math.pow(x, 2.0);
        y = Math.pow(y, 2.0);
        
        r = Math.sqrt(x + y);
        f = Math.atan2(y, x);
        f = f*180/3.14159;
        
        BigDecimal bdr = new BigDecimal(r);
        bdr = bdr.setScale(2, BigDecimal.ROUND_HALF_UP); 
        jTextField3.setText(String.valueOf(bdr));
        
        BigDecimal bdf = new BigDecimal(f);
        bdf = bdf.setScale(2, BigDecimal.ROUND_HALF_UP); 
        jTextField4.setText(String.valueOf(bdf));
        
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    adesso va meglio però ci sono ancora problemi con la fase. In particolare quando la fase è negativa... Quando la fase è negativa mi segna un risultato positivo sballato. Come mai?

  6. #6
    Originariamente inviato da luci89
    adesso va meglio però ci sono ancora problemi con la fase. In particolare quando la fase è negativa... Quando la fase è negativa mi segna un risultato positivo sballato. Come mai?
    perchè sui numeri reale e immaginario ci fai prima il quadrato e poi li usi per la fase
    ti conviene farci prima il calcolo della fase, come segue (ho spostato solo il calcolo della fase):

    codice:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
        double x,y,f,r;
        
        x = Double.parseDouble(jTextField1.getText());
        y = Double.parseDouble(jTextField2.getText());
        
        f = Math.atan2(y, x);
        f = f*180/3.14159;
        
        x = Math.pow(x, 2.0);
        y = Math.pow(y, 2.0);
        
        r = Math.sqrt(x + y);
        
        
        BigDecimal bdr = new BigDecimal(r);
        bdr = bdr.setScale(2, BigDecimal.ROUND_HALF_UP); 
        jTextField3.setText(String.valueOf(bdr));
        
        BigDecimal bdf = new BigDecimal(f);
        bdf = bdf.setScale(2, BigDecimal.ROUND_HALF_UP); 
        jTextField4.setText(String.valueOf(bdf));
        
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Vero! Non ci avevo fatto caso grazie mille

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Bene ora funziona, non capisco invece perchè non va l'operazione inversa cioè passare un numero complesso dalla forma polare a quella algebrica. La porzione di codice è questa ed è riferita ad un secondo pulsante che fa l'operazione inversa di quella precedente:



    L'ordine delle operazioni è lo stesso del mio file in C. Come mai vengono risultati sbagliati? Grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Risolto, avevo invertito il numero dei TextField

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.