• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java- problem z else if

VPS Starter Arubacloud
0 głosów
422 wizyt
pytanie zadane 25 października 2020 w Java przez Poczatkujacy011 Nowicjusz (120 p.)

Cześć Wam,

Od jakiegoś czasu zająłem się nauką języka JAVA.

I doszedłem do problemu dla mnie "nie do przejścia", chciałbym by po wybraniu JRadioButtona zmieniał mi się system obliczeń za pomocą komendy "else if" jednak wyskakuje mi błąd i podkreśla. Bez tego obawiam się ze nie zmieni im się sposób obliczania.

poniżej przedstawiam kod:

mport javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public interface Interface {

    class Main extends JFrame implements ActionListener {
        JButton wyjscie, przelicz;
        JLabel LabelPrzywitanie, LabelMetric, LabelQuantity, LabelLength, LabelWidth, LabelHeight, LabelPallet, LabelCbm, LabelCw;
        JTextField TextQuantity, TextLength, TextWidth, TextHeight, TextPalletUs, TextCbmUs, TextCwUs, TextPalletEu,TextCbmEu, TextCwEu;
        ButtonGroup ButtonsWybor;
        JRadioButton RadioUs, RadioEu;

        double ObliczenieQuantityUs, OobliczenieLengthUs, ObliczenieWidthUs, OblicznieHeightUs, OoblicznieCbmUs, OblicznieCwUs, ObliczenieQuantityEu, ObliczenieLengthEu, ObliczenieWidthEu, OblicznieHeightEu, OoblicznieCbmEu, OblicznieCwEu;
        char Zx = 'x';

        public Main() {
            setSize(400, 300);
            setTitle("Demo");
            setLayout(null);

            //  RADIO BUTTONS

            ButtonsWybor = new ButtonGroup();

            RadioEu = new JRadioButton("EU", true);
            RadioEu.setBounds(150,45,40,20);
            ButtonsWybor.add(RadioEu);
            add(RadioEu);
            RadioEu.addActionListener(this);
            RadioEu.setToolTipText("EU metric system");

            RadioUs = new JRadioButton("US", false);
            RadioUs.setBounds(190,45,50,20);
            ButtonsWybor.add((RadioUs));
            add(RadioUs);
            RadioUs.addActionListener(this);
            RadioUs.setToolTipText("US metric system");

            //BUTTONS

            przelicz = new JButton("Przelicz");
            przelicz.setBounds(20, 195, 100, 20);
            add(przelicz);
            przelicz.addActionListener(this);

            wyjscie = new JButton("Wyjście");
            wyjscie.setBounds(120, 195, 100, 20);
            add(wyjscie);
            wyjscie.addActionListener(this);


            // LABELS IN

            LabelPrzywitanie = new JLabel("Demo");
            LabelPrzywitanie.setBounds(100, 10, 300, 30);
            add(LabelPrzywitanie);

            LabelMetric = new JLabel("Chose metric system:");
            LabelMetric.setBounds(20,40,200,30);
            add(LabelMetric);

            LabelQuantity = new JLabel("Quantity:");
            LabelQuantity.setBounds(20, 65, 50, 30);
            add(LabelQuantity);

            LabelLength = new JLabel("Length:");
            LabelLength.setBounds(20, 95, 50, 30);
            add(LabelLength);

            LabelWidth = new JLabel("Width:");
            LabelWidth.setBounds(20, 125, 50, 30);
            add(LabelWidth);

            LabelHeight = new JLabel("Height:");
            LabelHeight.setBounds(20, 155, 50, 30);
            add(LabelHeight);

            // LABELS OUT

            LabelPallet = new JLabel("Pallet in CM:");
            LabelPallet.setBounds(165, 65, 70, 30);

            LabelCbm = new JLabel("CBM:");
            LabelCbm.setBounds(165, 105, 85, 30);

            LabelCw = new JLabel("C.W.:");
            LabelCw.setBounds(165, 145, 85, 30);

            // TEXTFIELDS IN

            TextQuantity = new JTextField("");
            TextQuantity.setBounds(75, 74, 50, 18);
            add(TextQuantity);
            TextQuantity.addActionListener(this);
            TextQuantity.setToolTipText("Enter quantity");


            TextLength = new JTextField("");
            TextLength.setBounds(75, 104, 50, 18);
            add(TextLength);
            TextLength.addActionListener(this);
            TextLength.setToolTipText("Enter length of your shipment");

            TextWidth = new JTextField("");
            TextWidth.setBounds(75, 134, 50, 18);
            add(TextWidth);
            TextWidth.addActionListener(this);
            TextWidth.setToolTipText("Enter width of your shipment");


            TextHeight = new JTextField("");
            TextHeight.setBounds(75, 164, 50, 18);
            add(TextHeight);
            TextHeight.addActionListener(this);
            TextHeight.setToolTipText("Enter height of your shipment");

            // TEXTFIELDS OUT US

            TextPalletUs = new JTextField("");
            TextPalletUs.setBounds(240, 74, 135, 18);

            TextCbmUs = new JTextField("");
            TextCbmUs.setBounds(240, 114, 135, 18);

            TextCwUs = new JTextField("");
            TextCwUs.setBounds(240, 154, 135, 18);

            // TEXTFIELDS OUT EU

            TextPalletEu = new JTextField("");
            TextPalletEu.setBounds(240, 74, 135, 18);

            TextCbmEu = new JTextField("");
            TextCbmEu.setBounds(240, 114, 135, 18);

            TextCwEu = new JTextField("");
            TextCwEu.setBounds(240, 154, 135, 18);


        }

        public static void main(String[] args) {
            Main okno = new Main();
            okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            okno.setVisible(true);
        }


        @Override
        public void actionPerformed(ActionEvent e)

        {

            // PROGRAMOWANIE BUTTONOW

            Object zrodlo = e.getSource();

            if (zrodlo==wyjscie)
            {
                dispose();
            }
            else if (zrodlo==przelicz || zrodlo==TextQuantity || zrodlo==TextLength || zrodlo==TextWidth || zrodlo==TextHeight);
            {
                repaint();
                add(LabelPallet);
                add(LabelCbm);
                add(LabelCw);
            }

            if (zrodlo==RadioEu);
            {
                add(TextPalletEu);
                add(TextCbmEu);
                add(TextCwEu);

                // PROGRAMOWANIE TEXFIELDOW IN EU

                ObliczenieQuantityEu = Double.parseDouble(TextQuantity.getText());
                ObliczenieLengthEu = Double.parseDouble(TextLength.getText());
                ObliczenieWidthEu = Double.parseDouble(TextWidth.getText());
                OblicznieHeightEu = Double.parseDouble(TextHeight.getText());

                OoblicznieCbmEu = ((ObliczenieLengthEu / 100) * (ObliczenieWidthEu / 100) * (OblicznieHeightEu / 100) * ObliczenieQuantityEu);
                OblicznieCwEu = OoblicznieCbmEu * 166.66666666666;


                // PROGRAMOWANIE TEXTFIELDOW OUT EU

                TextPalletEu.setText(String.valueOf(ObliczenieLengthEu) + Zx + String.valueOf(ObliczenieWidthEu) + Zx + String.valueOf(OblicznieHeightEu));
                TextCbmEu.setText(String.valueOf(OoblicznieCbmEu));
                TextCwEu.setText(String.valueOf(OblicznieCwEu));
            }
            if (zrodlo==RadioUs);
            {
                add(LabelPallet);
                add(LabelCbm);
                add(LabelCw);
                add(TextPalletUs);
                add(TextCbmUs);
                add(TextCwUs);

                // PROGRAMOWANIE TEXTFIELDOW IN US

                ObliczenieQuantityUs = Double.parseDouble(TextQuantity.getText());
                OobliczenieLengthUs = Double.parseDouble(TextLength.getText());
                ObliczenieWidthUs = Double.parseDouble(TextWidth.getText());
                OblicznieHeightUs = Double.parseDouble(TextHeight.getText());

                OobliczenieLengthUs = OobliczenieLengthUs * 2.54;
                ObliczenieWidthUs = ObliczenieWidthUs * 2.54;
                OblicznieHeightUs = OblicznieHeightUs * 2.54;

                OoblicznieCbmUs = ((OobliczenieLengthUs / 100) * (ObliczenieWidthUs / 100) * (OblicznieHeightUs / 100) * ObliczenieQuantityUs);
                OblicznieCwUs = OoblicznieCbmUs * 166.66666666666;

                // PROGRAMOWANIE TEXTFIELDOW OUT US

                TextPalletUs.setText(String.valueOf(OobliczenieLengthUs) + Zx + String.valueOf(ObliczenieWidthUs) + Zx + String.valueOf(OblicznieHeightUs));
                TextCbmUs.setText(String.valueOf(OoblicznieCbmUs));
                TextCwUs.setText(String.valueOf(OblicznieCwUs));
            }
        }
    }
}

 

komentarz 25 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

jednak wyskakuje mi błąd i podkreśla

Możesz pokazać treść tego błędu? 

komentarz 25 października 2020 przez Poczatkujacy011 Nowicjusz (120 p.)
przeniesione 25 października 2020 przez HaKIM
Jak daję else if to:

java: 'else' without 'if'

jednak jak używam samego if to gdy JRadioButton zmieniam na "US" to:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at pl.IMPORTtest.Interface$Main.actionPerformed(Interface.java:181)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

2 odpowiedzi

+3 głosów
odpowiedź 25 października 2020 przez tangarr Mędrzec (154,780 p.)

W kodzie, który umieściłeś nie ma żadnego niepoprawnego użycia słowa kluczowego else.

Natomiast masz kilka niepoprawnych użyć dyrektywy if.

if (zrodlo==RadioEu);
{
    //blok kodu
}

Ten średnik po instrukcji if powoduje zakończenie ciągu instrukcji if/else.
Kod bloku wykona się niezależnie od wyniku instrukcji if. Zastanów się nad zmianą edytora kodu. Dobry edytor powinien zaraportować takie błędy.

komentarz 25 października 2020 przez VBService Ekspert (251,210 p.)
edycja 25 października 2020 przez VBService

@Poczatkujacy011

Jedynie gdy kod, który ma się wykonać po if-ie, jest "krótki", taka składania jest prawidłowa:

if (zrodlo==RadioEu) repaint();
. . . // dalsza część kodu po if-ie
add(LabelPallet);
add(LabelCbm);
add(LabelCw);

. . .

Czyli do poprawienia linie (usunięcie średnika):

163 else if (zrodlo==przelicz || zrodlo==TextQuantity || zrodlo==TextLength ||
                   zrodlo==TextWidth || zrodlo==TextHeight);
171 if (zrodlo==RadioEu);
194 if (zrodlo==RadioUs);

0 głosów
odpowiedź 25 października 2020 przez Wiciorny Ekspert (269,120 p.)

Jak koledzy pisali u Ciebie zaraz po rozpoczęciu dyrektywy if ... ją kończysz, blok który jest po niej, nie wykonuje się to jest w ogóle błędny zapis, bo 

if (zrodlo==RadioUs);

ten średnik nie powinien tu mieć miejsce, stąd ... kończysz dyrektywę i "else if" nie widzi wyżej wymienionego bloku przez co dostajesz błąd java: 'else' without 'if'

Mimo że w pierwszym etapie sama pierwsza instrukcja jest poprawna to niestety, elfe if kończysz średnikiem 

 else if (zrodlo==przelicz || zrodlo==TextQuantity || zrodlo==TextLength
 || zrodlo==TextWidth || zrodlo==TextHeight);

co właśnie powoduje wyżej wymieniony problem .
Kolejny błąd to błąd wyraźnie opisany w tych linijkach związany z typem 

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at pl.IMPORTtest.Interface$Main.actionPerformed(Interface.java:181)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at

 

Podobne pytania

0 głosów
2 odpowiedzi 768 wizyt
pytanie zadane 21 lipca 2020 w Java przez T100 Obywatel (1,450 p.)
0 głosów
1 odpowiedź 490 wizyt
pytanie zadane 7 sierpnia 2017 w Java przez LukasHardwares Początkujący (490 p.)
+1 głos
3 odpowiedzi 881 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...