Java Programm verbessern/vereinfachen

ausgetrixt

Aktives Mitglied
Hallo!
Ich habe ein Programm geschrieben, das das Datum im Dezember in den dazugehörigen Tag umwandelt und ausgibt. Ich bräuchte eure Erfahrung und Java-Kenntnisse um das Programm zu "komprimieren" und den Aufbau und die Struktur des Java Programmes zu verbessern!

Das Programm funktioniert so einwandfrei!
Vielen Dank für eure Hilfe!!!

Hier der Code:
Java:
import java.util.Scanner;

public class Weekdays_in_December {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
       
        int x = 0;
        while(x < 31) {
            try {
                String s = new String(scanner.nextLine());
                int date = 0;
           
                if (s.equals("end")) {
                    x = 31;
                }
           
                else {
                    String ss = new String(s.substring(9));
                    date = Integer.parseInt(ss);
                }
               
                if (date > 31) {
                    System.out.println("The date is too high!");
                }
               
                if (date == 4 || date == 11 || date == 18 || date == 25) {
                    System.out.println("Monday");
                }
                if (date == 5 || date == 12 || date == 19 || date == 26) {
                    System.out.println("Tuesday");
                }
                if (date == 6 || date == 13 || date == 20 || date == 27) {
                    System.out.println("Wednesday");
                }
                if (date == 7 || date == 14 || date == 21 || date == 28) {
                    System.out.println("Thursday");
                }
                if (date == 1 || date == 8 || date == 15 || date == 22 || date == 29) {
                    System.out.println("Friday");
                }
                if (date == 2 || date == 9 || date == 16 || date == 23 || date == 30) {
                    System.out.println("Saturday");
                }
                if (date == 3 || date == 10 || date == 17 || date == 24 || date == 31) {
                    System.out.println("Sunday");
                }
                x++;
            }
            catch (Exception e) {
                System.out.println("Invalid input!");
            }
        }
       
    }
 

Thallius

Top Contributor
Mal davon abgesehen, dass man mit der Date API das in einem Einzeiler machen kann, was ja sicher nicht Deine Intention war, so würde ich den Rest ermitteln wenn man die eingegebene Zahl durch 7 teile (Nennt sich Modulo). Dann kannst Du die Tage in ein Array von Freitag bis Donnerstag packen und einfach den ArrayInhalt vom Restwert -1 nehmen.

Gruß

Claus
 

ausgetrixt

Aktives Mitglied
Ok, danke...
Dass es so was wie eine Date API gibt wusste ich nicht :D, aber ja war nicht wirklich meine Intention,
das mit dem Modulo werde ich versuchen Danke!
 

krgewb

Top Contributor
@Thallius: Kannst du uns zeigen wie das geht? Ich habe bereits das:

Java:
import java.text.DateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class Hauptprogramm {

    public static void main(String[] args) {

        // ##############
        // # Beispiel 1 #
        // ##############

        System.out.println("Beispiel 1:");

        // Syntax:

        // Jahr minus 1900.

        // Danach der index von dem Monat.
        // 0 = Januar
        // 1 = Februar
        // 2 = Maerz
        // 3 = April
        // ...
        // 11 = Dezember

        // Danach kommt der Tag.
        // 1 = 1
        // 2 = 2
        // ...
        // 31 = 31
        Date gebdatum = new Date(2004 - 1900, 3, 30);

        System.out.println("Geburtsdatum:       " + gebdatum);
        System.out.println("Wochentag als Zahl: " + gebdatum.getDay());

        // ##############
        // # Beispiel 2 #
        // ##############

        System.out.println("\nBeispiel 2:");

        GregorianCalendar now = new GregorianCalendar();
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
        System.out.println("Aktuelles Datum:    " + df.format(now.getTime()));

    }
}

Ausgabe:
Code:
Beispiel 1:
Geburtsdatum:       Fri Apr 30 00:00:00 CEST 2004
Wochentag als Zahl: 5

Beispiel 2:
Aktuelles Datum:    Samstag, 2. Dezember 2017 14:28 Uhr MEZ

In Beispiel 1 wird Date in Eclipse durchgestrichen dargestellt da es als deprecated gilt.
 

krgewb

Top Contributor
OK. Ich habe es jetzt so gemacht:
Java:
import java.time.LocalDate;

public class Hauptprogramm {

    public static void main(String[] args) {
        System.out.println("Aktuelles Datum:    " + LocalDate.now());
        System.out.println("Wochentag:          " + LocalDate.now().getDayOfWeek());
        System.out.println("Wochentag als Zahl: " + LocalDate.now().getDayOfWeek().getValue());
    }

}
Ausgabe:
Code:
Aktuelles Datum:    2017-12-02
Wochentag:          SATURDAY
Wochentag als Zahl: 6
Aber wie mache ich das für ein beliebiges Datum?
 

krgewb

Top Contributor
Danke!
Java:
System.out.println("30. März 2004:                        " + LocalDate.of(2004, 3, 30));
System.out.println("Wochentag vom 30. März 2004:          " + LocalDate.of(2004, 3, 30).getDayOfWeek());
System.out.println("Wochentag vom 30. März 2004 als Zahl: " + LocalDate.of(2004, 3, 30).getDayOfWeek().getValue());

Ausgabe:
Code:
30. März 2004:                        2004-03-30
Wochentag vom 30. März 2004:          TUESDAY
Wochentag vom 30. März 2004 als Zahl: 2

@ausgetrixt Verstehst du Modulo?
 

ausgetrixt

Aktives Mitglied
@krqewb ja, Modulo errechnet den Rest von einer Division, das heißt:
Java:
int a = 1 % 1 // das % ist das Modulo Zeichen und der Rest der Division ergibt 0

// daraus folgt:
a = 0;
 
Zuletzt bearbeitet:

ausgetrixt

Aktives Mitglied
Meine "Verbesserung" des Programmes sieht dann so aus:
Java:
import java.util.Scanner;

public class Weekdays_in_December {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        String[] weekdays = new String[7];
        weekdays[0] = "Thursday";
        weekdays[1] = "Friday";
        weekdays[2] = "Saturday";
        weekdays[3] = "Sunday";
        weekdays[4] = "Monday";
        weekdays[5] = "Tuesday";
        weekdays[6] = "Wednesday";
      
        int i = 0;
        while (i < 31) {
            try {
                String s = new String(scanner.nextLine());

                if (s.equals("end")) {
                    i = 31;
                } else {
                    String dateString = new String(s.substring(9));
                    int date = 0;
                    int modulo = 100;
                    int index = 100;
                  
                    date = Integer.parseInt(dateString);
                  
                    if (date <= 31 && date > 0) {
                        modulo = (date % 7);
                  
                        for (int j = 0; j < 7; j++) {
                            if (modulo == j) {
                                System.out.println(weekdays[j]);
                            }
                        }
                    } else if (date == 0 || date > 31){
                        System.out.println("The date is too high or does not exist!");
                    }
                }
            } catch (Exception e) {
                System.out.println("Invalid input!");
            }
            i++;
        }
    }

}
 
Zuletzt bearbeitet:

ausgetrixt

Aktives Mitglied
Wichtig für dich sind eigentlich nur die Zeilen:
Java:
modulo = (date % 7);
                
for (int j = 0; j < 7; j++) {
     if(modulo == j) {
         System.out.println(weekdays[j]);
     }
 

Thallius

Top Contributor
Die For Schleife zusammen mit If ABfrage kannst du komplett löschen. Es kann ja nur der richtige Eintrag zutreffen. Denk mal drüber nach ;)

index wird wohl gar nicht benutzt und modulo würde ich dort deklarieren wo es gebraucht wird und nicht darüber. genau genoimmen kannst du natürlich auch direkt

Code:
System.out.println(weekdays[date %7|]);

schreiben. Finde ich persönlich aber schon etwas unleserlicher.

Gruß

Claus
 

krgewb

Top Contributor
Meine "Verbesserung" des Programmes sieht dann so aus:
Java:
import java.util.Scanner;

public class Weekdays_in_December {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        String[] weekdays = new String[7];
        weekdays[0] = "Thursday";
        weekdays[1] = "Friday";
        weekdays[2] = "Saturday";
        weekdays[3] = "Sunday";
        weekdays[4] = "Monday";
        weekdays[5] = "Tuesday";
        weekdays[6] = "Wednesday";
    
        int i = 0;
        while (i < 31) {
            try {
                String s = new String(scanner.nextLine());

                if (s.equals("end")) {
                    i = 31;
                } else {
                    String dateString = new String(s.substring(9));
                    int date = 0;
                    int modulo = 100;
                    int index = 100;
                
                    date = Integer.parseInt(dateString);
                
                    if (date <= 31 && date > 0) {
                        modulo = (date % 7);
                
                        for (int j = 0; j < 7; j++) {
                            if (modulo == j) {
                                System.out.println(weekdays[j]);
                            }
                        }
                    } else if (date == 0 || date > 31){
                        System.out.println("The date is too high or does not exist!");
                    }
                }
            } catch (Exception e) {
                System.out.println("Invalid input!");
            }
            i++;
        }
    }

}

Wenn ich dein Programm ausführe und eine Zahl eingebe erscheint bei jeder Zahl:
Invalid input!

Code:
System.out.println(weekdays[date %7|]);
Was bedeutet der senkrechte Strich?
 

ausgetrixt

Aktives Mitglied
@krqewb weil ich das so gemacht habe, dass du vorher 9 Zeichen eingeben musst, dass heißt z.B.: December 12 dann ließt er die Zahl 12 ein, habe das Programm also nur für "December-Monate" geschrieben
 

krgewb

Top Contributor
Achso! Ja, jetzt funktioniert es!

Du deklarierst
Code:
int index = 100;
aber du verwendest es nirdends.
 
Ä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
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
J Java-Programm Allgemeine Java-Themen 13
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