Java-Programm

J /-\ \/ /-\

Mitglied
Bin noch relativ neu in Java und habe auch nicht das hintergrundwissen, wie man Computerprogramme aufbaut. Ich habe zwar Erfahrung mit (Objektorientierter)programmierung in php, aber das kann man sicher nicht vergleichen. Es wäre nett, wenn sich jemand mal dieses .. "Programm" anschauen könnte und mir Kritik dazu geben könnte. Ich möchte gerne wissen, was ich verbessern kann und was ich mir für die zukunft merken soll.


Danke an jeden, der sich Zeit für mich nimmt

umrechner.java
Java:
package umrechner;

public class umrechner
{
    public static void main( String[] args )
    {
        boolean runAgain = true;
        String input;
        while( runAgain != false )
        {
            showMenü();
            input = getInput();
            switch(input)
            {
                case "a":
                    dateigrößen();
                    break;
                case "b":
                    break;
                case "c":
                    break;
                case "x":
                    runAgain = false;
                    break;
            }
        }
        System.out.println( "Programm beendet." );
    }
    
    public static void showMenü()
    {
        System.out.println("### Phips Umrechner ###");
        System.out.println("a - Dateigroessen");
        System.out.println("b - noch ausstehend");
        System.out.println("c - noch ausstehend");
        System.out.println("x - Programm beenden");
        System.out.println("### Version 0.1 ###");
        System.out.println("-------------------");
    }
    
    public static String getInput()
    {
        scannerInput wayne = new scannerInput();
        String input;
        System.out.print("Ihre Eingabe: ");
            input = wayne.newString();
        System.out.println("-------------------");
        return( input );
    }
    
    public static void dateigrößen()
    {
        String aE, zE;// aE = Ausgangseinheit; zE = Zieleinheit
        int a = 1, b = 1, zahl = 0;
        scannerInput x = new scannerInput();
        System.out.println( "\"b\"  --> byte" );
        System.out.println( "\"kb\" --> kilobyte" );
        System.out.println( "\"mb\" --> megabyte" );
        System.out.println( "\"gb\" --> gigabyte" );
        System.out.println( "\"tb\" --> terabyte" );
        System.out.print("Ausgangseinheit: ");aE= x.newString();
        System.out.print("Zielseinheit: ");zE= x.newString();
        
        switch(aE)
        {
            case "b":
                a = 1;
                break;
            case "kb":
                a = 2;
                break;
            case "mb":
                a = 3;
                break;
            case "gb":
                a = 4;
                break;
            case "tb":
                a = 5;
                break;
        }
        
        switch(zE)
        {
            case "b":
                b = 1;
                break;
            case "kb":
                b = 2;
                break;
            case "mb":
                b = 3;
                break;
            case "gb":
                b = 4;
                break;
            case "tb":
                b = 5;
                break;
        }
        System.out.print("Zahl: ");zahl = x.newInt();
        System.out.println( "Ergebnis: " + calc(a, b, 1024, zahl) );
    }
    
    public static int calc( int a, int b, int umrechnungszahl, int x )
    {
        if( a > b )
        {
            while( a > b )
            {
                x = x / umrechnungszahl;
                a--;
            }
        }
        else if( a < b )
        {
            while( a < b )
            {
                x = x * umrechnungszahl;
                b--;
            }
        }
        return x;
    }
}

scannerInput.java
Java:
package umrechner;

public class scannerInput
{
    java.util.Scanner input = new java.util.Scanner( System.in );
    
    public String newString()
    {
        return input.next();
    }
    
    public int newInt()
    {
        return input.nextInt();
    }
    
}
 

TKausL

Top Contributor
Hallo,
ich versuche mal FeedBack zu geben:

#1: Klassen fangen mit einem GROßbuchstaben an (sollten sie)
#2: Nutz bitte KEIN Denglisch (showMenü, ...)
#3:
Java:
while( runAgain != false ) //Macht man nicht!
while( runAgain == true ) //Auch nicht!
while( runAgain ) //So siehts schon besser aus
#4: Default in die switch rein.

Ist so das, was mir auf Anhieb aufgefallen ist...
 

faetzminator

Gesperrter Benutzer
Ich habe zwar Erfahrung mit (Objektorientierter)programmierung [...]

Es ist aber überhaupt kein objektorientiertes Programm ;) Hast du Erfahrung mit dem Zeugs von PHP 5 (eben OO~)?
Ansonsten, auch wenn inzwischen möglich, dass man Sonderzeichen und was weiss ich in die Programme einbringen kann, bitte tu das einfach nicht. Nur schon wegen den Charsets. Und Tastaturen ohne Umlaute.
Aber wenn du gem. TKausL auf Denglisch verzichtest, wird das auch kein Problem mehr sein :)
 
G

Gast2

Gast
Moin,

#5 benutze keine Deutschen Umlaute für Methoden/Variablen/Klassen/etc.

Code:
public void 綜藝節目() {
    // deshalb
}

nimm bitte einfach ASCII, sonnst fangen wir irgend wann an den Quellcode umzukopieren weil keiner mehr die Methoden lesen kann - weder Europäer noch Asiaten.

hand, mogel

Edith mein "zu Spät"
 
T

Tomate_Salat

Gast
a,b,c,wayne, aE, zE sind keine sinnvollen Variablen-/Parameternamen. Benenne diese sinnvoll, sonst weißt du hinterher nicht mehr, was diese bewirken. Gestalte deinen Code immer so, dass du beim Überfliegen schon erkennen kannst, was gerade passiert. Wenn dem mal nicht der Fall ist, dann helfen dir:
a) Kommentare (nicht nur über Methoden/Klassen was die machen, sondern auch im Code die einen Abschnitt kurz beschreiben)
Java:
// Hier wird der Benutzer geprüft
... x zeilen code
// Hier wird einen Aktion mit dem Benutzer ausgeführt

b) ggf. Abschnitte in der Methode in weitere Methoden(oder gar Klassen) auslagern. Eine Methode (Beispiel) [c]validateInputData()[/c] sagt aus was gerade passiert und man muss nicht erst (übertrieben) 500Zeilen Code anschauen, bei dem Daten behandelt werden.

In unserem Programm sind viele Methoden (viel zu) groß. Da bin ich immer froh wenn soetwas wie oben beschreiben gemacht wird/wurde.
 

Landei

Top Contributor
Die Berechnung sollte mit Fließkomma-Zahlen erfolgen: Wenn ich 512 byte in kByte umwandle, möchte ich 0.5 und nicht 0 sehen.
 
S

Spacerat

Gast
PHP ist so objektorientiert, wie Wale Fische sind. Eigentlich kann man auch in Java nicht von Objektorientiert sprechen, wenn man sich nicht aus dem statischen Kontext der main löst. Richtig objektorientiert entwickelt man, wenn es ausser der main nichts anderes statisches mehr gibt aber das ist natürlich utopisch, Utility-Klassen sind ja nicht verboten. Je weniger man das Schlüsselwort "static" verwendet, um so objektorientierter programmiert man.
Sicher, in PHP ist seit Version 5 afaik auch ein OOP Ansatz da (mit Veerbung und Zeugs), aber wer nutzt den schon, wenn es nach wie vor um so vieles einfacher ist, die in PHP gebundelten Funktionen zu verwenden. PHP-Programmierer sind im Allgemeinen deswegen weniger mit OOP vertraut, als sie von sich aus behaupten, selbst wenn sie PHP 5 nutzen (welches diesen OOP Ansatz bietet) aber dennoch mehr oder weniger Code produzieren, der auch in PHP 4 noch lauffähig wäre.
 
Zuletzt bearbeitet von einem Moderator:

J /-\ \/ /-\

Mitglied
Vielen Dank, dass ihr euch Zeit für mich genommen habt. Ich habe nun glaube ich alle Verbesserungsvorschläge eingebaut und den Code ein wenig aufgeräumt bzw. aufgesplittet.

Hier gibte s das ganze nochmal als Download inklusive der kompilierten Dateien

Umrechner.java
Java:
package umrechner;

public class Umrechner
{
    public static void main( String[] args )
    {
        boolean runAgain = true;
        String selectedMenuItem;
        while( runAgain )
        {
            showMainMenu();
            selectedMenuItem = selectMenuItem();
            switch( selectedMenuItem )
            {
                case "a":
                    FileSizes FileSizes = new FileSizes();
                    FileSizes.run();
                    break;
                case "b":
                    break;
                case "c":
                    break;
                case "x":
                    runAgain = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println( "Programm beendet." );
    }
    
    public static void showMainMenu()
    {
        System.out.println("### Phips Umrechner ###");
        System.out.println("a - Dateigroessen");
        System.out.println("b - noch ausstehend");
        System.out.println("c - noch ausstehend");
        System.out.println("x - Programm beenden");
        System.out.println("### Version 0.1 ###");
        System.out.println("-------------------");
    }
    
    public static String selectMenuItem()
    {
        java.util.Scanner input;input = new java.util.Scanner( System.in );
        String selectedMenuItem;
        System.out.print("Ihre Eingabe: ");
            selectedMenuItem = input.next();
        System.out.println("-------------------");
        return( selectedMenuItem );
    }
}

Calc.java
Java:
package umrechner;

public class Calc
{
    public float execute( float a, float b, float conversionNumber, float x )
    /*
     * a und b bilden das Verhältnis
     * conversionNumber ist die Umrechnungszahl
     * x ist die zu berechnende Zahl
     */
    {
        if( a > b )//Einheit wird verkleinert
        {
            while( a > b )
            {
                x = x * conversionNumber;
                a--;
            }
        }
        else if( a < b )//Einheit wird vergrößert
        {
            while( a < b )
            {
                x = x / conversionNumber;
                b--;
            }
        }
        return x;
    }
}

Filesizes.java
Java:
package umrechner;

public class FileSizes
{
    public void run()
    {
        String from, to;//Ausgangseinheit und Zieleinheit
        float a = 1, b = 1, x = 0;//a und b bilden das Verhältnis zwischen Ausgangseinheit und Zieleinheit
        java.util.Scanner input = new java.util.Scanner( System.in );
        System.out.println( "\"b\"  --> byte" );
        System.out.println( "\"kb\" --> kilobyte" );
        System.out.println( "\"mb\" --> megabyte" );
        System.out.println( "\"gb\" --> gigabyte" );
        System.out.println( "\"tb\" --> terabyte" );
        System.out.print("Ausgangseinheit: ");from = input.next();
        System.out.print("Zielseinheit: ");   to   = input.next();
        
        switch( from )
        {
            case "b":
                a = 1;
                break;
            case "kb":
                a = 2;
                break;
            case "mb":
                a = 3;
                break;
            case "gb":
                a = 4;
                break;
            case "tb":
                a = 5;
                break;
            default:
                break;
        }
        
        switch( to )
        {
            case "b":
                b = 1;
                break;
            case "kb":
                b = 2;
                break;
            case "mb":
                b = 3;
                break;
            case "gb":
                b = 4;
                break;
            case "tb":
                b = 5;
                break;
            default:
                break;
        }
        System.out.print("Zahl: ");x = input.nextFloat();
        Calc Calc = new Calc();
        x = Calc.execute(a, b, 1024, x);
        System.out.println( "Ergebnis: " + x );
    }
}
 
S

Spacerat

Gast
Ich wollte nur darauf hinaus, dass ich erfahrungen mit Objektorientierter Programmierung in PHP habe...
Äehm... noch mal... Du hast möglicherweise Erfahrung in PHP und im Zweifelsfalle evtl. schon länger also ungefähr seit PHP 4 wo an Objektorientiert noch überhaupt nicht bzw. nur schwer zu denken war. Das macht dich jetzt nicht unbedingt schlechter, aber merken kann man sich's trotzdem: OOP ist ab PHP 5 nur in der Dokumentation vorhanden. Okay, implementiert ist's wohl auch, aber scheinbar macht nicht ein PHP-Programmierer davon gebrauch. Will sagen: OOP-Erfahrungen sehen anders aus. ;)
 
S

Spacerat

Gast
Aber wieso denn? Was die OOP angeht, sieht das doch schon gut aus... schön viele Klassen... und... naja okay.

Kürzere Methoden könnte man noch schreiben. Evtl. fällt da einem schon bei den relativ identischen switch-Anweisungen mit "from" und "to" ein, z.B. eine Methode "getFactor(String einheit)".
 

faetzminator

Gesperrter Benutzer
Ich beginne meistens bei den Datenklassen - also Beans. Schreib mir einfach nur eine Struktur, die objektorientiert alle Daten mit Gettern und Settern zur Verfügung stellt - je nach dem noch kleine Zusatzmethoden. Also so was wie:
Java:
public class Human {
    private final String name;
    // Mann <-> Mann, Frau <-> Frau muss heutzutags auch erlaubt sein, deswegen keine Subklasse Man und Woman, in welche nur das Gegengeschlecht rein kann :P
    private Human marriagePartner; 

    public Human(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setMarriagePartner(Human marriagePartner) {
        this.marriagePartner = marriagePartner;
    }

    public Human getMarriagePartner() {
        return marriagePartner;
    }

    public boolean isWedded() {
        return marriagePartner != null; // wenn marriagePartner vorhanden -> verheiratet
    }
}

Und danach brauchst du noch irgendwelche Controller, Parser, Converter und ggf. irgendwo eine UI (egal ob Rich oder Thin client, ob Web oder Console, ...).
Joa, so einfach gehts eigentlich - fast ;)
}
 
S

Spacerat

Gast
Ich hab' mir dein Programm, trotz langer Weile zwar nicht angesehen, kann mir aber gut vorstellen, dass meines ähnliches tut.
Java:
import java.util.Scanner;

public class MemEngineer {
	public enum Unit {
		BYTE("b", "Byte"),
		KBYTE("kB", "Kilobyte"),
		MBYTE("MB", "Megabyte"),
		GBYTE("GB", "Gigabyte"),
		TBYTE("TB", "Terabyte"),
		;

		private final String unit, name, toString;

		private Unit(String unit, String name) {
			this.unit = unit;
			this.name = name;
			toString = ordinal() + ". " + unit + " (" + name + ")";
		}

		public String unit() {
			return unit;
		}

		public String unitName() {
			return name;
		}

		public static Unit getByOrdinal(int ordinal) {
			for(Unit u : values()) {
				if(u.ordinal() == ordinal) {
					return u;
				}
			}
			return null;
		}

		public static Unit getByUnit(String unit) {
			for(Unit u : values()) {
				if(u.unit.equals(unit)) {
					return u;
				}
			}
			return null;
		}

		public static Unit getByName(String name) {
			for(Unit u : values()) {
				if(u.name.equals(name)) {
					return u;
				}
			}
			return null;
		}

		public static double claculate(double value, Unit fromUnit, Unit toUnit) {
			if(fromUnit == toUnit) {
				return value;
			}
			value *= Math.pow(1024.0, toUnit.ordinal() - fromUnit.ordinal());
			return value;
		}

		@Override
		public String toString() {
			return toString;
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		for(Unit u : Unit.values()) {
			System.out.println(u);
		}
		System.out.print("Ausgangseinheit: ");
		Unit ae = null;
		while(ae == null) {
			ae = Unit.getByOrdinal(sc.nextInt());
		}
		System.out.print("Zieleinheit: ");
		Unit ze = null;
		while(ze == null) {
			ze = Unit.getByOrdinal(sc.nextInt());
		}
		System.out.print("Wieviel: ");
		double value = sc.nextDouble();
		System.out.println("Ergebnis: " + Unit.claculate(value, ae, ze) + ze.unit());
		sc.close(); // Wer hat sich das blos ausgedacht. Ich koennt' ... aber ehrlich jetze.
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F Java-Programm lizensieren Allgemeine Java-Themen 21
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
itwestnet Mein Java-Programm läuft nicht in China Allgemeine Java-Themen 4
B SMS von Vodafone Mobile Connest mit JAVA-Programm lesen Allgemeine Java-Themen 0
J Java Auf anderes Programm warten Allgemeine Java-Themen 9
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
Developer_X OpenStreetMap in Java Programm einbinden Allgemeine Java-Themen 10
Developer_X Java Programm Beenden Allgemeine Java-Themen 3
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
S Java-Programm verbraucht zu viel RAM Allgemeine Java-Themen 8
S Java-Programm für "Börsenanalyse" schreiben Allgemeine Java-Themen 4
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
M Problem mit (etwas komplizierterem) Java Programm Allgemeine Java-Themen 14
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
J Java Programm - ausführbare Jar Datei erstellen Allgemeine Java-Themen 2
C Programm von C++ auf Java umschreiben Allgemeine Java-Themen 27
I Java-Programm: Zahlen in Worte Allgemeine Java-Themen 22
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
Java-Insel Wie kann ich ein Java-Programm zum "automatischen Öffner" einer Dateisorte machen? Allgemeine Java-Themen 13
O Java-Programm lastet CPU aus Allgemeine Java-Themen 8
C Registration im Web mit Java-Programm durchführen Allgemeine Java-Themen 6
R Java Programm beenden mit SIGTERM Allgemeine Java-Themen 9
T Java Programm als Batch Befehl Allgemeine Java-Themen 6
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
H Java-Programm nur mit SDK ausführbar? Allgemeine Java-Themen 5
C Java Programm über SSH starten Allgemeine Java-Themen 16
S jar Datei mit Java Programm öffnen Allgemeine Java-Themen 3
J Java-Programm im Hintergrund Allgemeine Java-Themen 3
Jackii Java Programm aus anderen Java Programm starten Allgemeine Java-Themen 20
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
G Java Programm aus Java Programm starten Allgemeine Java-Themen 6
M Wie Java Programm mit grafischen Oberfläche versehen Allgemeine Java-Themen 2
JAVATUX Java Programm mit ATI Stream Unterstützung Allgemeine Java-Themen 3
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
C Mit Java in einem anderes Programm eingreifen Allgemeine Java-Themen 21
S C++/C KeyListener zusammen mit Java Programm Allgemeine Java-Themen 4
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
S Brauche Hilfe bei Planung für JAVA-Programm Allgemeine Java-Themen 3
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
F Anderes Java-Programm aufrufen Allgemeine Java-Themen 2
B Excel Datei in einem Java Programm mit GUI darstellen Allgemeine Java-Themen 9
M Java Programm als Dienst starten... Allgemeine Java-Themen 4
A Installation von Java ME Programm auf Sony Ericsson Handy Allgemeine Java-Themen 3
M Rein informativ - Daten aus Excel-Tabelle in Java-Programm importieren Allgemeine Java-Themen 3
J Installer für Java-Programm Allgemeine Java-Themen 5
N Programm starter in Java? Allgemeine Java-Themen 12
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
T Mit JNI von C++ auf ein laufendes Java-Programm zugreifen Allgemeine Java-Themen 10
H aus Java-Programm Dateien öffnen Allgemeine Java-Themen 5
Z Java Programm - xxxxx auf der Konsole ausgeben Allgemeine Java-Themen 4
T cpp Programm via jna in java nutzen Allgemeine Java-Themen 3
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
G Java Programm mit Freischalt code entwickeln Allgemeine Java-Themen 30
clupus Meldung an laufendes Java-Programm schicken - Wie? Allgemeine Java-Themen 6
E Zweites Java Programm sichtbar starten Allgemeine Java-Themen 4
T Mit Java Programm auf Firefox zugreifen Allgemeine Java-Themen 2
Airwolf89 *.exe mit java programm ausführen Allgemeine Java-Themen 1
V Java-Programm automatisch starten Allgemeine Java-Themen 2
MQue aktuelle Wetterdaten für Java- Programm Allgemeine Java-Themen 9
O Programm mittels Java installieren Allgemeine Java-Themen 15
K Java Chat Programm Allgemeine Java-Themen 2
M Java programm über cmd öffnen Allgemeine Java-Themen 2
Schandro Datei öffnen mit... Bestimmten Dateityp mit einen Java-Programm öffnen lassen Allgemeine Java-Themen 5
N Per Java-Programm onClick ausführen Allgemeine Java-Themen 5
D mit Java das Programm "Editor" öffnen Allgemeine Java-Themen 7
M Wie Java-Programm über Batch-file starten? Allgemeine Java-Themen 8
G Logikhindernisse im Java- Programm Allgemeine Java-Themen 6
V Java-Programm nur "mit halber Kraft" arbeiten lass Allgemeine Java-Themen 11
_SeiA_ Hilfe Kleines Java Programm schreiben. Summen. Allgemeine Java-Themen 3
G Java- Programm mit bat- Datei starten Allgemeine Java-Themen 16
V Java-Programm richtig neustarten? Allgemeine Java-Themen 9
G JDBC Programm und niedrige Java-Versionen Allgemeine Java-Themen 14
oltoko PID für das laufende Java Programm herausfinden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben