Variablen Einheiten umrechen klappt nicht

Lucaaa

Bekanntes Mitglied
Hallo!
Ich möchte Geschwindigkeit (s/t) zeit und weg mittels der jeweils anderen 2 gegebenen größen berechnen. Das klappt auch wunderbar. Nun soll es aber auch die Möglichkeit geben anstatt nur s in meter, t in Sekunden, und v in m/s auch mit Kilometer, stunde, und km/h geben.

Meine Methode spuckt da aber immer anstatt eigentlich 30 (60km, 2h) 0,0008 irgendwas aus.
Bitte um hilfe.
Vielen Dank schonmal.

Java:
package com.ludevstudio.android.physiccalculator;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import org.w3c.dom.Text;

public class GleichfoermigeBewegung extends android.app.Fragment implements View.OnClickListener {
    //View
    View viewFragment_gleichfoermig;

     //Elemente
    Spinner spinnerWeg;
    Spinner spinnerZeit;
    Spinner spinnerGeschwindigkeit;
    Button btnBerechnen;
    EditText edtWeg, edtZeit, edtGeschwindigkeit;


    //Spinnereinträge
    String[] spinnerWegEintraege = {"m", "km"};
    String[] spinnerZeitEintraege = {"s", "h"};
    String[] spinnerGeschwindigkeitEintraege = {"m/s", "km/h"};

    //Berechnung
    String einheitWeg = "meter";
    String einheitZeit = "sekunde";
    String einheitGeschwindigkeit = "meter/sekunde";
    double s;
    double t;
    double v;


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        viewFragment_gleichfoermig = (ViewGroup) inflater.inflate(R.layout.fragment_gleichfoermige_bewegung, container, false);
        return viewFragment_gleichfoermig;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

       initKomponenten();
    }

    private void initKomponenten() {
        spinnerWeg = (Spinner) viewFragment_gleichfoermig.findViewById(R.id.spinner_weg_gleichfoermig);
        ArrayAdapter<String> adapterWeg = new ArrayAdapter<String> (getActivity(), android.R.layout.simple_spinner_item, spinnerWegEintraege);
        spinnerWeg.setAdapter(adapterWeg);
        spinnerWeg.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int positionWeg = spinnerWeg.getSelectedItemPosition();
                if(positionWeg==0) {
                    einheitWeg = "meter";
                }else if(positionWeg==1) {
                    einheitWeg = "kilometer";
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
            spinnerZeit = (Spinner) viewFragment_gleichfoermig.findViewById(R.id.spinner_zeit_gleichfoermig);
            ArrayAdapter<String> adapterZeit = new ArrayAdapter<String> (getActivity(), android.R.layout.simple_spinner_item, spinnerZeitEintraege);
            spinnerZeit.setAdapter(adapterZeit);
        spinnerZeit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int positionZeit = spinnerZeit.getSelectedItemPosition();
                if(positionZeit==0) {
                    einheitZeit = "sekunde";
                }else if(positionZeit==1) {
                    einheitZeit = "stunde";
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        spinnerGeschwindigkeit = (Spinner) viewFragment_gleichfoermig.findViewById(R.id.spinner_geschwindigkeit_gleichfoermig);
        ArrayAdapter<String> adapterGeschwindigkeit = new ArrayAdapter<String> (getActivity(), android.R.layout.simple_spinner_item, spinnerGeschwindigkeitEintraege);
        spinnerGeschwindigkeit.setAdapter(adapterGeschwindigkeit);
            edtWeg = (EditText) viewFragment_gleichfoermig.findViewById(R.id.edt_weg_gleichfoermig);
            edtZeit = (EditText) viewFragment_gleichfoermig.findViewById(R.id.edt_zeit_gleichfoermig);
            edtGeschwindigkeit = (EditText) viewFragment_gleichfoermig.findViewById(R.id.edt_geschwindigkeit_gleichfoermig);
        spinnerGeschwindigkeit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                int positionGeschwindigkeit = spinnerGeschwindigkeit.getSelectedItemPosition();
                if(positionGeschwindigkeit==0) {
                    einheitGeschwindigkeit = "meter/sekunde";
                }else if(positionGeschwindigkeit==1) {
                    einheitWeg = "kilometerprostunde";
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        btnBerechnen = (Button) viewFragment_gleichfoermig.findViewById(R.id.button1_berechnen);
            btnBerechnen.setOnClickListener(this);


    }


    @Override
    public void onClick(View view) {
        int id = view.getId();
            s=0; t=0; v=0;
        if(id==R.id.button1_berechnen) {
            try {
                s = Double.parseDouble(edtWeg.getText().toString());
                } catch (Exception e) {
            }
            try {
                t = Double.parseDouble(edtZeit.getText().toString());
            } catch (Exception e) {
            }
            try {
                v = Double.parseDouble(edtGeschwindigkeit.getText().toString());
            } catch (Exception e) {
            }


                   if(!edtWeg.getText().toString().isEmpty() && !edtZeit.getText().toString().isEmpty() && !edtGeschwindigkeit.getText().toString().isEmpty()) {
                       Toast.makeText(getActivity(), getString(R.string.fehlerNichtszuberechnen), Toast.LENGTH_SHORT).show();
                 } else if(!edtWeg.getText().toString().isEmpty() && !edtZeit.getText().toString().isEmpty()) {
                        edtGeschwindigkeit.setText(Double.toString(berechneGeschwindigkeit(s,t)));
                    } else if(!edtZeit.getText().toString().isEmpty() && !edtGeschwindigkeit.getText().toString().isEmpty()) {
                        edtWeg.setText(Double.toString(berechneWeg(v,t)));
            } else if(!edtWeg.getText().toString().isEmpty() && !edtGeschwindigkeit.getText().toString().isEmpty()) {
                  edtZeit.setText(Double.toString(berechneZeit(s,v)));
            } else {
                Toast.makeText(getActivity(), getString(R.string.fehlerNichtgenuegendWerte), Toast.LENGTH_SHORT).show();
                   }



        }

    }

    public double berechneGeschwindigkeit(double s, double t) {
        Double v;

        if(einheitWeg=="kilometer")
            s = s*1000;
        if(einheitZeit=="stunde")
            t = t*3600;
        v = s/t;
        if(einheitGeschwindigkeit=="kilometerprostunde") {
            return (v)*(3.6);
        }

        return v;
    }

    public double berechneWeg(double v, double t) {
        return v*t;
    }
    public double berechneZeit(double s, double v) {
        return s/v;
    }



}
 

X5-599

Top Contributor
Vermutlich nicht. Wenn ihr euch den Code mal genauer anguckt merkt ihr, dass der seine Strings ausschließlich aus dem StringPool bekommt. Somit macht das == vs equals() keinen Unterschied. Ich denke eher er hat sich hier vertan:

Code:
else if(positionGeschwindigkeit==1) {
                    einheitWeg = "kilometerprostunde";
                }

Vermutlich war gemeint:

Code:
else if(positionGeschwindigkeit==1) {
                    einheitGeschwindigkeit =  "kilometerprostunde";
                }

Aber das ist nur eine Vermutung, da ich ebenfalls den Code mehr oder weniger nur überflogen habe...

Vorsicht ist bei solchen String Vergleichen aber trotzdem geboten (Vor allem als Beginner). Falls die Strings mal nicht aus dem String Pool stammen (per Literal erzeugt wie: "ein string") werden solche Vergleiche ( mittels == ) fehlschlagen (wird false ergeben wenn ein true erwartet würde). Darum sollte man sich daran halten Strings mittels equals() zuvergleichen:

Code:
String s1 = "eins";
String s2 = "eins";
booelan istGleich = s1.equals(s2);
 

truesoul

Top Contributor
Wenn ihr euch den Code mal genauer anguckt merkt ihr, dass der seine Strings ausschließlich aus dem StringPool bekommt. Somit macht das == vs equals() keinen Unterschied.

Doch es macht ein Unterschied. Denn mit "kilometer", "stunde" oder "kilometerprostunde" wird ein String erzeugt und bekommt somit eine neue Referenz die es noch nicht gibt.

Java:
// "kilometer" wird neu erzeugt
if(einheitWeg=="kilometer")
    s = s*1000;
// "stunde" wird neu erzeugt   
if(einheitZeit=="stunde")
    t = t*3600;
    v = s/t;
// "kilometerprostunde" wird neu erzeugt   
if(einheitGeschwindigkeit=="kilometerprostunde") {
    return (v)*(3.6);
}
 

mrBrown

Super-Moderator
Mitarbeiter
Doch es macht ein Unterschied. Denn mit "kilometer", "stunde" oder "kilometerprostunde" wird ein String erzeugt und bekommt somit eine neue Referenz die es noch nicht gibt.

Java:
// "kilometer" wird neu erzeugt
if(einheitWeg=="kilometer")
    s = s*1000;
// "stunde" wird neu erzeugt  
if(einheitZeit=="stunde")
    t = t*3600;
    v = s/t;
// "kilometerprostunde" wird neu erzeugt  
if(einheitGeschwindigkeit=="kilometerprostunde") {
    return (v)*(3.6);
}
Da wird es eben nicht „neu“ erzeugt, sondern kommt aus dem StringPool, so wie alle zu Compile-Zeit bekannten Strings ;)
 

X5-599

Top Contributor
An beide. Es macht hier KEINEN Unterschied weil ALLE Strings hier Literale sind. Es gibt keine Konkatenationen/keine Strings aus Methoden (die evtl ihre String Objekte sonst wie erzeugen) ... nur Literale. Auch wenn an mehreren Stellen "kilometer" einer Variablen zugewiesen wird ist es IMMER dassselbe! Objekt. Weil eben NICHT jedesmal ein neues erzeugt wird, sondern erst der String Pool gecheckt wird, und bei vorhanden sein des gewünschten Strings dieser verwendet wird.

EDIT: etwas zu spät. @mrBrown ich meinte deine beiden Vorredner :)
 

truesoul

Top Contributor
An beide. Es macht hier KEINEN Unterschied weil ALLE Strings hier Literale sind. Es gibt keine Konkatenationen/keine Strings aus Methoden (die evtl ihre String Objekte sonst wie erzeugen) ... nur Literale. Auch wenn an mehreren Stellen "kilometer" einer Variablen zugewiesen wird ist es IMMER dassselbe! Objekt. Weil eben NICHT jedesmal ein neues erzeugt wird, sondern erst der String Pool gecheckt wird, und bei vorhanden sein des gewünschten Strings dieser verwendet wird.

EDIT: etwas zu spät. @mrBrown ich meinte deine beiden Vorredner :)

Ja sorry, es macht keinen Unterschied.
 

X5-599

Top Contributor
Problem war es kommt nicht das Ergebnis raus, was rauskommen soll. Hab wie gesagt die Logik dahinter nicht überprüft. Mir ist nur aufgefallen, dass er wohl an der einen Stelle den falschen Variablennamen verwendet hat...

Möchte mich auch an dieser Stellen für die CAPS im meinem Post entschuldigen. Sieht ziemlich "besserwisserisch" aus. Sollte mehr der Betonung dienen. Italics wären wohl besser gewesen. Nächstes mal dann. Editieren werde ichs nicht mehr.
 

truesoul

Top Contributor
Problem war es kommt nicht das Ergebnis raus, was rauskommen soll. Hab wie gesagt die Logik dahinter nicht überprüft. Mir ist nur aufgefallen, dass er wohl an der einen Stelle den falschen Variablennamen verwendet hat...

Möchte mich auch an dieser Stellen für die CAPS im meinem Post entschuldigen. Sieht ziemlich "besserwisserisch" aus. Sollte mehr der Betonung dienen. Italics wären wohl besser gewesen. Nächstes mal dann. Editieren werde ichs nicht mehr.

Ist schon ok ;)
 

X5-599

Top Contributor
Habe mal etwas genauer drübergeschaut. Meine Vermutung hat sich wohl bewahrheitet.
Dadurch dass durch den "spinnerGeschwindigkeit" anstelle der Variablen "einheitGeschwindigkeit" die Variable "einheitWeg" beschrieben wurde, kommt es bei der Berechnung zu folgendem Fehler:

Code:
if(einheitWeg=="kilometer")  //einheitsWeg wurde fälschlicherweise überschrieben und somit ist die if-Bedingung nicht erfüllt
            s = s*1000;

if(einheitZeit=="stunde")    //einheitZeit passt noch, also ist die if-Bedingung erfüllt und es wird gerechnet
            t = t*3600;

v = s/t;

if(einheitGeschwindigkeit=="kilometerprostunde") {  //einheitGeschwindigkeit wurde nie auf "kilometerprostunde" gesetzt, if-Bedingung ist nicht erfüllt
            return (v)*(3.6);
        }

Darum ist das Ergebnis bei:
s=60
t=2

2 * 3600 = 7200
60 / 7200 = 0,00833

anstatt:
60 * 1000 = 60000
2 * 3600 = 7200
60000 / 7200 = 8,333
8,333 * 3,6 = 30
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ruvok Programmieren eines Einheiten Konverters Java Basics - Anfänger-Themen 1
D Umrechnung von Einheiten Java Basics - Anfänger-Themen 7
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
F jsoup einloggen klappt nicht Java Basics - Anfänger-Themen 10
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
nbergmann Umgebungsvariablen einstellen unter Windows 7 klappt nicht Java Basics - Anfänger-Themen 2
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
I Schleifendurchlauf ab 2. Durchlauf klappt nicht Java Basics - Anfänger-Themen 10
J Objecte in TreeSet einfügen klappt nicht Java Basics - Anfänger-Themen 5
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
K Methoden Pause drücken klappt nur jedes 2. Mal Java Basics - Anfänger-Themen 6
S UserPref und Java Application klappt immer nicht. Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3
D Telefon programmieren klappt nicht. Java Basics - Anfänger-Themen 5
VfL_Freak Tastaturabfrage auf '@' klappt nicht :-( Java Basics - Anfänger-Themen 1
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
B Erste Schritte Vererbung klappt nicht Java Basics - Anfänger-Themen 24
M zufälliges Setzen von Schiffen in while klappt nicht immer Java Basics - Anfänger-Themen 3
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
K RGB Wert Heller machen (Dunkler machen klappt) Java Basics - Anfänger-Themen 2
K Einlesen einer txt von BufferedReader klappt nicht wie gewünscht Java Basics - Anfänger-Themen 12
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
K CompareTo zwei mal benutzen klappt nicht. Java Basics - Anfänger-Themen 2
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
J Erste Schritte Bin ein Programm am schreiben klappt aber nicht und weis nicht warum Java Basics - Anfänger-Themen 20
F Dateien lesen klappt nicht Java Basics - Anfänger-Themen 2
Kenan89 Export klappt nicht Java Basics - Anfänger-Themen 2
K Serialisierung: speichern und auslesen, auslesen klappt nicht Java Basics - Anfänger-Themen 14
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
J Einem String-Array in einer for-Schleife Strings zuweisen - Klappt nicht in einer for-Schleife Java Basics - Anfänger-Themen 5
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
C Methoden Negativer Wert klappt nicht Java Basics - Anfänger-Themen 4
M Datei löschen, klappt nicht Java Basics - Anfänger-Themen 3
J Compiler-Fehler Eclipse .jar Export klappt nicht. Java Basics - Anfänger-Themen 17
A Oracle Verbindungsaufbau klappt nicht Java Basics - Anfänger-Themen 7
GianaSisters Erste Schritte Datei umbennen bzw verschieben klappt nicht Java Basics - Anfänger-Themen 6
Z Speichern in eine .txt klappt.. fast Java Basics - Anfänger-Themen 23
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
U Automatenprüfung in Java implementieren — String Vergleich klappt nicht Java Basics - Anfänger-Themen 40
K Klassenumbenennung klappt nicht Java Basics - Anfänger-Themen 11
M Synchronized klappt nicht Java Basics - Anfänger-Themen 11
I .csv-Datei einlesen klappt aber kann nicht in String geschrieben werden!?!?! Java Basics - Anfänger-Themen 11
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
D Jar klappt nicht trotz main Methode Java Basics - Anfänger-Themen 19
M Will Sudokus basteln - klappt net Java Basics - Anfänger-Themen 5
R fireTableDataChanged klappt nicht Java Basics - Anfänger-Themen 7
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
T Override klappt nochmal wie? Java Basics - Anfänger-Themen 3
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
C SELECT klappt INSERT klappt nicht!!!??? Java Basics - Anfänger-Themen 3
Luk10 Aufrufen klappt nicht! Java Basics - Anfänger-Themen 7
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
raptorrs Schreiben in Properties-File klappt nicht Java Basics - Anfänger-Themen 6
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
C .java in .class klappt nicht Java Basics - Anfänger-Themen 16
J Datenbankverbindung klappt doch nicht? IBM DB2 Java Basics - Anfänger-Themen 2
O JPanel einbinden klappt nicht Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
B Strings aus Array einlesen klappt nicht Java Basics - Anfänger-Themen 5
J reverse array, klappt nicht ? Java Basics - Anfänger-Themen 3
L Leider klappt bei mir ein Befehl nicht Java Basics - Anfänger-Themen 4
G Unterverzeichnisse anlegen klappt nicht Java Basics - Anfänger-Themen 4
D Ausgabe klappt nicht Java Basics - Anfänger-Themen 9
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G EventHandling klappt nicht Java Basics - Anfänger-Themen 8
G JFreeChart und das Update(was nicht klappt). Java Basics - Anfänger-Themen 3
S Schleife klappt nicht Java Basics - Anfänger-Themen 5
G Vergleich klappt nicht Java Basics - Anfänger-Themen 3
J jar erstellen. Es klappt einfach nicht Java Basics - Anfänger-Themen 14
G JDK Installation klappt auf Vista nicht Java Basics - Anfänger-Themen 4
H import java.io.* klappt nich Java Basics - Anfänger-Themen 12
G Icon einfügen klappt nicht Java Basics - Anfänger-Themen 3
M String in textarea übernehmen klappt nicht Java Basics - Anfänger-Themen 13
M Insert into klappt nicht? Java Basics - Anfänger-Themen 7
V Insert into klappt nicht so ganz Java Basics - Anfänger-Themen 6
M Audioclip wiedergabe klappt nicht Java Basics - Anfänger-Themen 4
2 Aufruf einer Methode klappt nicht Java Basics - Anfänger-Themen 3
B JPasswordField *beep* klappt nich Java Basics - Anfänger-Themen 8
Y Main Klasse in Konsole ausführen klappt nicht Java Basics - Anfänger-Themen 7
T Plus-Operation beim Taschenrechner klappt nicht. Java Basics - Anfänger-Themen 7
U BufferedImages verschieben klappt nicht Java Basics - Anfänger-Themen 37
B textfeld mit enter auslesen klappt nicht Java Basics - Anfänger-Themen 12
D import java.utils.Scaner klappt nicht Java Basics - Anfänger-Themen 17
P Bestimmter befehl der nicht klappt Java Basics - Anfänger-Themen 5
P dynamisches Binden klappt nicht so recht Java Basics - Anfänger-Themen 7
D FileDIalog klappt. aber geladenes bild nicht angezeigt Java Basics - Anfänger-Themen 2
G Batch aufrufen klappt nicht mit Runtime Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben