1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Problem bei einem Programm

  • skYeYe
  • 17. Februar 2010 um 22:57
  • Unerledigt
  • skYeYe
    3
    skYeYe
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    10
    • 17. Februar 2010 um 22:57
    • #1

    Also ich bin gerade beim Üben und möchte mich ein wenig für EPROG (SS2010) vorbereiten (hab keine Programmier-Vorkenntnisse). Dazu verwende ich das Buch von Reinhard Schiedermeier - Programmieren mit Java, Eine methodische Einführung. Naja, ich bin grad beim ersten Kapitel und habe bei der Aufgabe 1d ein (syntaktisches) Problem (glaube ich). Jedenfalls soll das Programm die Doppelfaktorielle ausgeben (für n=10 wäre das 2*4*6*8*10 = 3840). Wenn ich jetzt in meinem Programm für n = 10 eingebe, dann bekomme ich den Wert, für 9 bekomme ich 945, was auch richtig ist. Sobald ich jedoch für n = Integer.parseInt(args[0]) eingebe, bekomme ich eine Fehlermeldung (siehe screenshot) - im Buch wird das jedoch so verlangt. Was mache ich falsch?

    mein Code:

    Zitat

    public class DFact // Aufgabe 1d, S22
    {
    public static void main(String[] args)
    {
    // "Zutaten"
    int n; // A.
    int s; // B.
    int i; // C.

    // "Zubereitung"
    n = 9; // (für 9 = 945, für 10 = 3840, Integer.parseInt(args[0]) Fehlermeldung!)
    s = 1; // 2.
    i = n; // 3.

    while(i >= 1) // 4.
    {
    s = s * i; // 4a.
    i = i - 2; // 4b.
    }

    System.out.println(s); // 5.
    }
    }

    Alles anzeigen

    Danke schon mal! Wenn ich weitere Fragen habe, werde ich diese hier posten (im gleichen Thread), hoffe das geht OK. greetz@all&hf! misa

  • lewurm
    7
    lewurm
    Mitglied
    Reaktionen
    17
    Punkte
    437
    Beiträge
    81
    • 17. Februar 2010 um 23:18
    • #2

    hm... bei mir gehts:

    Code
    % cat DFact.java                                                                  23:13:48 lewurm pts/6
    public class DFact // Aufgabe 1d, S22
    {
            public static void main(String[] args)
            {
                    // "Zutaten"
                    int n; // A.
                    int s; // B.
                    int i; // C.
    
    
                    // "Zubereitung"
                    //n = 9; // (für 9 = 945, für 10 = 3840, Integer.parseInt(args[0]) Fehlermeldung!)
                    n = Integer.parseInt(args[0]);
                    s = 1; // 2.
                    i = n; // 3.
    
    
                    while(i >= 1) // 4.
                    {
                            s = s * i; // 4a.
                            i = i - 2; // 4b.
                    }
    
    
                    System.out.println(s); // 5.
            }
    } 
    
    
    $ javac DFact.java                                                           $ java DFact 10
    3840
    $ java DFact 11
    10395
    $ java DFact 9 
    945
    Alles anzeigen

    edit: ACHSO, du hast den parameter vergessen beim programmaufruf :)

    du musst es natuerlich in dieser art aufrufen:

    Code
    java DFact <dein wert>

    also z.B. eben so:

    Code
    java DFact 10


    ansonsten ist das argumenten array was das programm von der shell bekommt natuerlich leer, also ein "leeres array" und wenn er dann versucht auf ein erstes element zuzugreifen, gibts natuerlich eine exception weil jenes nicht existiert.

    lolwoot

  • skYeYe
    3
    skYeYe
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    10
    • 17. Februar 2010 um 23:33
    • #3

    lewurm, Danke, alter Schwede^^ Dachte wirklich nicht, dass so schnell eine Antwort kommt! Ja, im nachhinein komme ich mir mit der Frage doch bisschen dumm vor, tut mir leid, wenn ich in nächster Zeit öfter so dumme Fragen stellen werde, bin echter Anfänger...

    gn8

  • skYeYe
    3
    skYeYe
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    10
    • 24. Februar 2010 um 22:22
    • #4

    Hallo nochmal! Die Aufgaben des 2.Kapitels habe alleine lösen können, hat mich aber sehr viel Zeit gekostet! Nun bin ich beim 3.Kapitel und habe die erste Aufgabe gelöst: Median

    Aufgabenstellung: Schreiben Sie ein Programm Median, das drei Zahlen a, b und c von der Kommandozeile einliest und den mittelwert der drei wieder ausgibt. Hier ist nicht der arithmetische Mittelwert gemeint! Denken Sie sich a, b und c angeordnet, dass die Werte von links nach rechts nur steigen oder gleich bleiben. Median gibt die Zahl aus, die dann in der Mitte steht. Beispiel: $ java Median 2 1 2 -> Lösung 2
    Versuchen Sie die Anzahl der Vergleiche auf das Mindestmaß zu reduzieren.

    hier meine Lösung:

    Code
    public class Median // Aufgabe 3a, S98
    {
        public static void main(String[] args)
        {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = Integer.parseInt(args[2]);
    
            if(a<=b && b<=c)
                System.out.println(b);
            else if(a>b && b>=c)
                System.out.println(b);
            else if(a>b && c>b && a>=c)
                System.out.println(c);
            else if(a>b && c>b && c>a)
                System.out.println(a);
            else if(a<b && c<b && a>=c)
                System.out.println(a);
            else if(a<b && c<b && c>a)
                System.out.println(c);
        }
    }
    Alles anzeigen

    Meint ihr vielleicht, dass es eine leichtere oder bessere Lösung gibt als die meine? Ist das normal, wenn man für die Aufgabe fast 90min braucht als Anfänger? Im Anhang noch meine Testinstanzen. Danke schon mal!

    Greetz@all&hf! misa

    2 Mal editiert, zuletzt von skYeYe (24. Februar 2010 um 23:17) aus folgendem Grund: Testinstanz: alle 3 gleich, zB 3 3 3 -&gt; Liefert jetzt 3

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 24. Februar 2010 um 23:19
    • #5
    Zitat von skYeYe

    Versuchen Sie die Anzahl der Vergleiche auf das Mindestmaß zu reduzieren.


    Probiers mal mit verschachtelten Bedingungen:

    Code
    if (a < b) {
        if (...) {
            ...
        } else {
            ...
        }
    } else {
        if (...) {
            ...
        } else {
            ...
        }
    }
    Alles anzeigen


    Es sollten insgesamt weniger Vergleichsoperatoren dastehen als bei deiner jetzigen Lösung (schau nur, wie oft du a > b vergleichst!), und in jeder möglichen Anordnung der Eingabewerte sollten maximal drei Vergleiche tatsächlich ausgeführt werden.

    Zitat

    Ist das normal, wenn man für die Aufgabe fast 90min braucht als Anfänger?


    Es ist normal, daß man als Anfänger "ewig" für Sachen braucht, die man mit mehr Erfahrung locker aus dem Ärmel schüttelt. Übung macht den Meister!

    *plantsch*

  • Schakal
    9
    Schakal
    Mitglied
    Reaktionen
    5
    Punkte
    780
    Beiträge
    152
    • 25. Februar 2010 um 10:02
    • #6

    Also du könntest auch einfach mall alle zahlen durch gehen (am besten in ein int-Array am Anfang kopieren). Das heißt merk dir den index der kleinsten Zahl und der größten Zahl + den Häufigkeitswert.

    der haufigkeitswert steigt auf 3 wenn alle gleich waren --> eine der Zahlen ausgeben.
    2 wenn zwei der Zahlen gleichen waren (einen der Indices merken).
    1 den ausgeben der nicht min oder max ist.

    Kürzer ist es aufjedenfall nicht.
    Edit: Lass die Idee weg. Ist für dich vorläufig noch zu schwer, da dass wahrscheinlich noch nicht behandelt wurde.
    Mach einfach nur die Behandlung so wie von Platschkuh vorgeschlagen.

    Für drei Elemente rechnet sich mein Vorschlag einfach nicht, aber es ist ne gut Übung.
    Für de echten Median bei mehr Element müsste man sortieren.

    mfg Schakal

    6 Mal editiert, zuletzt von Schakal (25. Februar 2010 um 11:14)

  • MrMassaker
    12
    MrMassaker
    Mitglied
    Reaktionen
    41
    Punkte
    1.436
    Beiträge
    263
    • 25. Februar 2010 um 11:42
    • #7

    oder du erstellst dir ein integer array mit 3 stellen, schreibst deine zahlen da rein, wendest die methode %29"]sort an und gibst einfach das mittlere element auf der kommandozeile aus.

    damit hast du gar keinen vergleich mehr in deinem programm :grinning_squinting_face:

    edit:

    Code
    public class Median// Aufgabe 3a, S98
    {
        public static void main(String[] args)
        {
    
    	int[] data = new int[3];
    
    
            data[0] = Integer.parseInt(args[0]);
            data[1] = Integer.parseInt(args[1]);
            data[2] = Integer.parseInt(args[2]);
    
    	java.util.Arrays.sort(data);
    
    	System.out.println(data[1]);
        }
    }
    Alles anzeigen

    Patient: "Doctor, doctor, my eye hurts when I poke it with a spoon."
    Doctor: "Don't poke it, then."

    2 Mal editiert, zuletzt von MrMassaker (25. Februar 2010 um 11:57)

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 25. Februar 2010 um 13:17
    • #8
    Zitat von MrMassaker


    damit hast du gar keinen vergleich mehr in deinem programm :grinning_squinting_face:

    das lässt sich auch erreichen, indem du die commons-math-library von apache verwendest. http://commons.apache.org/math/
    da gibts eine eigene Klasse Median, die dir den Wert errechnet :verycool:

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • MrMassaker
    12
    MrMassaker
    Mitglied
    Reaktionen
    41
    Punkte
    1.436
    Beiträge
    263
    • 26. Februar 2010 um 11:47
    • #9

    und wieder mal zeigt sich: wenn man java programmieren will muss man nur wissen wo man suchen muss :)

    Patient: "Doctor, doctor, my eye hurts when I poke it with a spoon."
    Doctor: "Don't poke it, then."

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung