Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
lincerix
Člen
Avatar
lincerix:12.3.2014 21:40

Dobří lidé,

mám takový problém, který potřebuji vyřešit :-) Programuji do školy převaděč jednotek, kdy potřebuji, aby to převáděla třeba cm na km a cm na stopy nebo stopy na cm atd.

Je to dost komplikované, ale s tímhle jsem si už poradil. Řeším však jiný problém :-) Hodím sem kód, abyste už měli prostor k lynčování mé osoby.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Prevadec {

    private static JTextField vstupField; //uživatel
    private static JComboBox prvniJBox;
    private static JComboBox druhyJBox;
    private static JLabel vysledek;
//konstruktor

    Prevadec() {
        JFrame frame = new JFrame();//Vytvoření okna
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Aby se okno po klepnutí na zavřít "zavřelo"


        JPanel hlavniCast = new JPanel();
        hlavniCast.setOpaque(true);

        JPanel vstupniCast = new JPanel();
        vstupniCast.setOpaque(true);

        vstupField = new JTextField();
        vstupField.setPreferredSize(new Dimension(50, 25));


        prvniJBox = new JComboBox(new String[]{"cm", "m", "km", "plc","stp","mil"});
        druhyJBox = new JComboBox(new String[]{"cm", "m", "km", "plc","stp","mil"});


        JButton vysledekTlacitko = new JButton("Převeď");//ono kouzelné tlačítko
        vysledekTlacitko.addActionListener(new PrevedJednotkyListener());

            vstupniCast.add(vstupField);
            vstupniCast.add(prvniJBox);
            vstupniCast.add(druhyJBox);
            vstupniCast.add(vysledekTlacitko);
        JPanel vysledekPanel = new JPanel();
        vysledekPanel.setLayout(new BoxLayout(vysledekPanel, BoxLayout.Y_AXIS));
        vysledek = new JLabel("Váš výsledek je :");
         vysledekPanel.add(vysledek);

        hlavniCast.add(vstupniCast);
        hlavniCast.add(vysledekPanel);

        frame.add(hlavniCast);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
Prevadec prevadec = new Prevadec();

    }

    private static class PrevedJednotkyListener implements ActionListener {





        @Override
        public void actionPerformed(ActionEvent e) {
            double cm = 0;
            double metry = 0;
            double kilometry = 0;
            double palce = 0;
            double stopy = 0;
            double mile = 0;

            String vstupniText;
            vstupniText = vstupField.getText();
             String jednotky = (String)prvniJBox.getSelectedItem();
             String jednotky2 = (String)prvniJBox.getSelectedItem();

            if(jednotky.equals("cm")&&jednotky2.equals("cm")){
               vysledek.setText("Nemá smysl převádět CM na CM");
        }
          else  if(jednotky.equals("cm")&&jednotky2.equals("m")){

              // TADY JE TEN PRŮŠVIH
               vysledek.setText("Centimetrů na metry je "+cm);
        }

    }

}
}

A kde je teda ten problém ? :-)

else  if(jednotky.equals("cm")&&jednotky2.equals("m")){

            // TADY JE TEN PRŮŠVIH
             vysledek.setText("Centimetrů na metry je "+cm);
      }

zkoušel jsem to tímhle:

else  if(jednotky.equals("cm")&&jednotky2.equals("m")){

               double vysledekcm = Double.parseDouble(vstupField)/100;
              vysledek.setText("Centimetrů na metry je "+vysledekcm);

Ale to pochopitelně nejde a nevím, jak to řešit :-) Nemohl by někdo poradit?

Potřeboval bych to tedy vyřešit tak, aby to vzalo vstup od zadavatele a s tím pak počítalo, ikdyž je to ve formě Stringu.

Šlo by to nějak? :-)

Díky za odpovědi

Odpovědět
12.3.2014 21:40
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
Warif-James
Člen
Avatar
Odpovídá na lincerix
Warif-James:12.3.2014 21:55

Jak by to mohlo být komplikované? Udělej jedno pole pro zadávání čísel. Nad tím select:

mapaJednotek = [0.1, 1, 10, 100, 100000];

výsledek = hodnota * (mapaJednotek[indexVybranéJednotkyZeSelectu] / mapaJednotek[indexCílovéJednotky]);

A to jsem prý špatný na algoritmy... :D

Editováno 12.3.2014 21:57
Nahoru Odpovědět
12.3.2014 21:55
Kde je můj životní EIP registr?
Avatar
lincerix
Člen
Avatar
lincerix:12.3.2014 22:01

Vymyslel jsem to zatím takhle

else if (jednotky.equals("cm")&&jednotky2.equals("m")){

          cm = Double.parseDouble(vstupniText)/100;

          vysledek.setText("asdfkj"+cm);
      }

Ale bohužel to nepočítá :-(

Nahoru Odpovědět
12.3.2014 22:01
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
Warif-James
Člen
Avatar
Odpovídá na lincerix
Warif-James:12.3.2014 22:04

Kde vidíš v mém kódu větvení? Nechápu proč se všichni vrhají po tom, jak program co nejvíce rozvětvit a zacyklit... Ani cyklus, ani větení na tohle nepotřebuješ - jen mozek - vycucal jsem si to z prstu za 3ms...

Editováno 12.3.2014 22:05
Nahoru Odpovědět
12.3.2014 22:04
Kde je můj životní EIP registr?
Avatar
lincerix
Člen
Avatar
Odpovídá na Warif-James
lincerix:12.3.2014 22:08

Děkuju moc za radu,

zkusím to implementovat do toho programu. Já jsem v Javě docela furt ještě začátečník a můžu říct, že práce s polema mě dělá problémy. A to jsem dělal i cvičení na pole tady :D Prostě sem na ně dutej.

Budu se snažit to nějak vymyslet podle tvého řešení a uvidí se :-)

Každopádně díky moc :-)

Nahoru Odpovědět
12.3.2014 22:08
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
Warif-James
Člen
Avatar
Odpovídá na lincerix
Warif-James:12.3.2014 22:14

Jak pokusíš - nevidím chybu - tak kde vdidíš problém? Vždy mě dostává, když se dá 50% větvení vyházet. Od čeho máme mapy, pole, výjimky, matematiku, geometrii, goniometrii, trigonometrii,... Věřím, že kdyby jsi se nad tím zamyslel, sestavil jsi si UML či tak něco, tak bys také přišel na mnohem efektivnější řešení. Programování není prostě o tom našprtat se syntax - chce to také pěkný a propracovaný návrh aplikace.

(o délce a čitelnosti kódu nepsaje)

Editováno 12.3.2014 22:17
Nahoru Odpovědět
12.3.2014 22:14
Kde je můj životní EIP registr?
Avatar
lincerix
Člen
Avatar
Odpovídá na Warif-James
lincerix:12.3.2014 22:19

Jde o to, abych to vymslel tak, že když zaškrtnu v prvním JComboBoxu "cm" a v druhym JComboBoxu "míle", tak aby to vykonalo zadanou logiku. Jak říkám, nemám skoro žádný zkušenosti s prací s polem, takže si to během zítřka (protože dnes už je pozdě) nastuduji :-)

Nahoru Odpovědět
12.3.2014 22:19
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
Warif-James
Člen
Avatar
Odpovídá na lincerix
Warif-James:12.3.2014 22:23

Ježíš - to předáš jako parametry...

const mapaJednotek = [0.1, 1, 10, 100, 100000];

převod(index1, index2)
{
výsledek = hodnota * (mapaJednotek[index1] / mapaJednotek[index2]);
}

...

převod(select1.SelectedIndex, select2.SelectedIndex);

Jen návrh - názvy prosím předělat aby zapadaly do OOP...

Nahoru Odpovědět
12.3.2014 22:23
Kde je můj životní EIP registr?
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.