• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

Java Bedingungsoperator ?

Heisenberg

Diablo-Veteran
Registriert
11 Juni 2006
Beiträge
1.478
Moin! Wir sollen ein Programm schreiben was zuerst fragt, welche Temperatureinheit man eingeben will (Celsius, Fahrenheit, Kelvin, Rankine, Reaumur), dann macht man eine Eingabe und das Programm soll dann in die anderen Einheiten umwandeln und diese in einer Tabelle ausgeben.
Je nach dem welche Einheit eingeben wurde, muss natürlich anders umgerechne werden.
Ich würde das einfach mit einer IF ELSE Abfrage machen:
if Eingabe=Celsuis
-rechne das so und so um
else
-if Eingabe=Fahrenheit
--rechne das so und so um
-else
[...]

Das Problem ist jedoch, dass wir dies mit dem Bedingungsoperator ? lösen sollen und da weiß ich absolut nicht, wie ich das anstellen soll. Der bietet ja eig. nur die Möglichkeit an etwas zu vergleichen.

Hat jemand einen Tipp für mich?

€Ach und könnte man das ausrechnen auch mit switch/case machen? Beim ausprobieren habe ich nur Fehlermeldungen bekommen. Bin'n noob. :(
 
Mit Java kenn ich mich nicht aus. C# sollte ähnlich funktionieren, als Anregung möge Dir das dienen:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            Dictionary<char, decimal> results = new Dictionary<char,decimal>();
            char op;
            decimal val = 0;

            Console.WriteLine("Bitte Eingabeeinheit angeben:"
                + Environment.NewLine
                + "Celsius\t\tC"
                + Environment.NewLine
                + "Fahrenheit\tF"
                + Environment.NewLine
                + "Kelvin\t\tK"
                + Environment.NewLine
                + "Rankine\t\tR"
                + Environment.NewLine
                + "Reaumur\t\tM");
            System.ConsoleKeyInfo input = Console.ReadKey(false);

            op = Convert.ToChar(input.Key);
            char.ToUpper(op);

            if ((op.CompareTo('C') != 0) && (op.CompareTo('F') != 0) && (op.CompareTo('K') != 0) && (op.CompareTo('R') != 0) && (op.CompareTo('M') != 0))
            {
                Console.WriteLine("Ungültiger Operator!");
                return;
            }

            Console.WriteLine("Eingabewert:");
            try
            {
                val = Convert.ToDecimal(Console.ReadLine());
            }
            catch (FormatException ex)
            {
                Console.WriteLine(String.Format("Fehler: {0}", ex.Message));
            }

            results.Add('C', (op == 'C') ? val : (op == 'F') ? (val - 32) / 1.8m : (op == 'K') ? val - 273.15m : (op == 'R') ? (val - 32 - 459.67m) / 1.8m : val * 1.25m);
            results.Add('F', (op == 'F') ? val : (op == 'C') ? (val * 1.8m) + 32 : (op == 'K') ? (val + 459.67m) / 1.8m : (op == 'R') ? (val - 459.67m) : (val * 2.25m) + 32);
            results.Add('K', (op == 'K') ? val : (op == 'C') ? val + 273.5m : (op == 'F') ? (val + 459.67m) / 1.8m : (op == 'R') ? val / 1.8m : val * 1.25m + 273.15m);
            results.Add('R', (op == 'R') ? val : (op == 'C') ? val * 1.8m + 32 + 459.67m : (op == 'F') ? val + 459.67m : (op == 'K') ? val * 1.8m : val * 2.25m + 32 + 459.67m);
            results.Add('M', (op == 'M') ? val : (op == 'C') ? val * 0.8m : (op == 'F') ? (val - 32) / 2.25m : (op == 'K') ? (val - 273.15m) * 0.8m : (val - 32 - 459.67m) / 2.25m);
 
            foreach(KeyValuePair<char, decimal> tmp in results)
                Console.WriteLine(String.Format("entspricht: {0} in °{1}", tmp.Value, (tmp.Key.Equals('C')) ? "Celsius" : (tmp.Key.Equals('K')) ? "Kelvin" : (tmp.Key.Equals('F')) ? "Fahrenheit" : (tmp.Key.Equals('R') ? "Rankine" : "Reaumur")));
        }
    }
}

Die Formeln sind nur reinkopiert und teilweise noch an die falsche Stelle. Vom Prinzip funktionierts aber, Du kannst als Zuweisung nämlich locker ne weitere Bedingung nehmen ... ich liiieebe den ternären Zuweisungsoperator <3 <3


€: Achja, switch():
Code:
            switch(op)
            {
                case 'C':
                    results.Add('C', val);
                    results.Add('K', val - 273.5m);
                    results.Add('F', (val - 32) / 1.8m);
                    results.Add('R', (val * 1.8m + 32 + 459.67m));
                    results.Add('M', val * 0.8m);
                    break;
                case 'K':
                    // ...
                    break;
                case 'F':
                    // ...
                    break;
                case 'R':
                    // ...
                    break;
                case 'M':
                    // ...
                    break;
            }
 
Zuletzt bearbeitet:
Gerne :)
Java hat das meiste ja von C++ geklaut und C# baut ebenfalls auf C++ auf. Daher passt das meist ganz gut, reicht aber in fast jedem Fall um sich aus Beispielen was zurechtbasteln zu können.
 
Zurück
Oben