[Java] Problem z przeliczaniem

0

Witam.
Napisałem aplet w Javie - przelicznik długości. Jednak mam problem: aplet nie przelicza miar na kilometry. Zaznaczyłem miary których nie przelicza symbolem //?.
Proszę o pomoc, praca na jutro na zaliczenie.

Kod:

import java.text.*;
import java.text.NumberFormat;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * lokoloko.java
 *
 * Created on 2010-04-21, 17:19:28
 */

/**
 *
 * @author Dawid
 */
public class lokoloko extends javax.swing.JFrame {

    /** Creates new form lokoloko */
    public lokoloko() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jComboBox1 = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        jComboBox2 = new javax.swing.JComboBox();
        jButton1 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(0, 204, 0));
        jPanel1.setForeground(new java.awt.Color(235, 233, 237));

        jLabel1.setFont(new java.awt.Font("Comic Sans MS", 1, 12)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(0, 51, 204));
        jLabel1.setText("Zamień");

        jTextField1.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jTextField1.setText("1");

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mm", "cm", "dm", "m", "km" }));
        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Comic Sans MS", 1, 12)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 51, 204));
        jLabel2.setText("na");

        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mm", "cm", "dm", "m", "km" }));
        jComboBox2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox2ActionPerformed(evt);
            }
        });

        jButton1.setBackground(new java.awt.Color(0, 0, 204));
        jButton1.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
        jButton1.setText("Przelicz");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                przeliczanie(evt);
            }
        });

        jTextField2.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        jLabel3.setBackground(new java.awt.Color(255, 102, 102));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGap(39, 39, 39)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jComboBox1, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jComboBox2, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(44, 44, 44))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(93, 93, 93)
                        .addComponent(jButton1)
                        .addGap(236, 236, 236))))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(299, Short.MAX_VALUE)
                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(64, 64, 64))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(66, 66, 66)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel2)
                            .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(16, 16, 16))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(141, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {

   
    }

    private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    private void przeliczanie(java.awt.event.ActionEvent evt) {


   // deklarujemy zmienną zmiennoprzecinkową typu double, która przechowuje
    // wynik przeliczenia miary długości
        double wynik=0.0;

    // tworzymy zmienną typu String (łańcuch znakowy). Otrzymuje ona nazwę
    // spole. Zmiennej tej przypisujemy wartość pobraną z pola tekstowego.
    // Wartość tę pobieramy za pomocą metody getText().
    String spole=jTextField1.getText().trim();
    // Dodatkowe wywołanie metody trim() spowoduje wycięcie zbędnych spacji,
    // które mogłyby się znaleźć na początku i końcu łańcucha znakowego.

    // By móc wykonywać działania matematyczne na pobranej z pola tekstowego
    // wartości, musimy ten łańcuch znakowy przekonwertować do wartości typu
    // double.
    double fpole=Double.parseDouble(spole);

    // Z obiektów typu JComboBox pobieramy za pomocą metody getSelectedIndex()
    // numer indeksu zaznaczonego na liście wartości. Indeksy liczone są od
    // zera (jeśli użytkownik wybierze pierwszy element, oznacza to, że został
    // wybrany indeks zerowy). Wartości indeksów przypisujemy zmiennym typu
    // całkowitego int w zmiennych o nazwach intComboBox1  oraz intComboBox2.
    int intComboBox1=jComboBox1.getSelectedIndex();
    int intComboBox2=jComboBox2.getSelectedIndex();

    // W kolejnym kroku za pomocą instrukcji warunkowej if sprawdzamy, czy
    // indeksy z obu list są jednakowe. Jeśli tak, oznacza to, że wartość
    // wpisana do pola tekstowego nie ulegnie zmianie (jest to sytuacja,
    // w której przechodzi przeliczanie milimetrów na milimetry czy metrów na
    // metry). W tym banalnym wypadku wystarczy zmiennej wynik  przyporządkować
    // wartość pola. Dla innych kombinacji trzeba będzie przeliczyć wartość
    // wynikową.
        if( (intComboBox1==0 && intComboBox2==0) || (intComboBox1==1 && intComboBox2==1) ||
            (intComboBox1==2 && intComboBox2==2) || (intComboBox1==3 && intComboBox2==3) ||
            (intComboBox1==4 && intComboBox2==4)){
        wynik=fpole;
    }

        // Po instrukcji if (jeśli) w nawiasach okrągłych podany jest warunek,
    // który powinien być spełniony, aby program mógł wykonać operacje
    // znajdujące się w nawiasach klamrowych. Jeśli warunek nie zostanie
    // spełniony, wykonywane są kolejne warunki podane po instrukcji else if
    // (w przeciwnym wypadku).
    else if(intComboBox1==0 && intComboBox2==1){ wynik=fpole/10; }
    else if(intComboBox1==0 && intComboBox2==2){ wynik=fpole/100; }
    else if(intComboBox1==0 && intComboBox2==3){ wynik=fpole/1000; }
    else if(intComboBox1==0 && intComboBox2==4){ wynik=fpole/1000000; } //?

    else if(intComboBox1==1 && intComboBox2==0){ wynik=fpole*10; }
    else if(intComboBox1==1 && intComboBox2==2){ wynik=fpole/10; }
    else if(intComboBox1==1 && intComboBox2==3){ wynik=fpole/100; }
    else if(intComboBox1==1 && intComboBox2==4){ wynik=fpole/100000; } //?

    else if(intComboBox1==2 && intComboBox2==0){ wynik=fpole*100; }
    else if(intComboBox1==2 && intComboBox2==1){ wynik=fpole*10; }
    else if(intComboBox1==2 && intComboBox2==3){ wynik=fpole/10; }
    else if(intComboBox1==2 && intComboBox2==4){ wynik=fpole/10000; } //?

    else if(intComboBox1==3 && intComboBox2==0){ wynik=fpole*1000; }
    else if(intComboBox1==3 && intComboBox2==1){ wynik=fpole*100; }
    else if(intComboBox1==3 && intComboBox2==2){ wynik=fpole*10; }
    else if(intComboBox1==3 && intComboBox2==4){ wynik=fpole/1000; }

    else if(intComboBox1==4 && intComboBox2==0){ wynik=fpole*1000000; }
    else if(intComboBox1==4 && intComboBox2==1){ wynik=fpole*100000; }
    else if(intComboBox1==4 && intComboBox2==2){ wynik=fpole*10000; }
    else if(intComboBox1==4 && intComboBox2==3){ wynik=fpole*1000; }


    // Instancję klasy NumberFormat pobieramy, wywołując jej statyczną metodę
    // getNumberInstance(). Klasa NumberFormat  dostarcza metody
    // setMaximumFractionDigits(), służącej ustaleniu maksymalnej liczby cyfr
    // po przecinku. W naszym przykładzie ustawiamy trzy cyfry po przecinku.
    NumberFormat nf=NumberFormat.getNumberInstance();
    nf.setMaximumFractionDigits(3);
    String swynik=nf.format(wynik);
    jLabel3.setText("Wynik = "+swynik+" "+jComboBox2.getSelectedItem());
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new lokoloko().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JComboBox jComboBox2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration

}
0

oczywiscie ze przelicza. jak ustawiles ze mają byc 3 cyfry po przecinku to sie nie dziw ze jak wynik jest mniejszy to wyswietla sie 0

0

co zmienić żeby było dobrze? gdzie tkwi błąd?

0

wszystko zalezy od tego jakie liczby bedziesz przeliczac. jak tylko calkowite to maksymalna potrzebna dokladnosc to 6 liczb po przecinku a nie 3 tak jak ustawiles (1 mm = 0,000001 km) ale jak zechesz zamienic 0.1 mm na km to znowu 'nie bedzie przeliczac'. musisz ustalic jakiej dokladnosci potrzebujesz

0

potrzebuję przeliczać liczby z 2 miejscami po przecinku. np 1,30km -> X mm

0

czyli najmniejsza liczba jaka mozesz otrzymac w wyniku powstanie z przeliczenia 0,01 mm na km. do tego potrzebujesz 8 miejsc po przecinku. wystarczy zmienic 3 na 8

0

Dziękuję pięknie ;) Już działa :))

1 użytkowników online, w tym zalogowanych: 0, gości: 1