tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
22
ZUGRIFFE
2819
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    GreenThunder Tutorials.de Gastzugang
    Hallo,

    in meiner Aufgabe für diese Woche geht es darum eine Kommandozeileneingabe auf Korrektheit (Ganz Zahl, keine String, kein Leerzeichen) zu überprüfen und anschließend in einer Methode die Stirlingzahl der beiden Eingaben berechnen.

    Mein Problem ist allerdings die Meldung:

    ...AufgabeZwei.java:82: stirling(int,int) in AufgabeZwei cannot be applied to (java.lang.String,java.lang.String)
    Genau weiß ich allerdings nicht was das bedeutet. Heißt das, dass zwei unterschiedliche Datentypen aufeinander treffen?

    Desweiteren bin ich mir nicht sicher, ob auch der Fall, Eingabe eines Leerzeichens, zu einer Fehlermeldung führt. Ich glaube mein Programm ignoriert das einfach.

    PHP-Code:
    import java.io.*;                                            
    import java.lang.*;                 

    public class 
    AufgabeZwei {
        
    public static 
    long stirling(int nint k)                           
       {
       
    long stir;                                                    
       if (
    n==&& k==0)                                                   
           {
           return 
    stir=1;                                            
           }     
           else                                                     
               {
               if (
    k==0)
                   {
                   return 
    stir=0
                   }
                   else
                     {
                     if (
    n==k)
                         {
                         return 
    stir=1
                         }
                         else
                           {
                           return 
    stir=(k*stirling(n-1,k)+stirling(n-1,k-1));
                           }
                   
                     }
                           
               } 
       }
       
       
       
        static 
    String eingabe(String xString y)                                   
       {
                                                           
        while ( 
    true )  
          {
           if(
    x.equals("") || y.equals(""))                                          
             {
             
    System.out.println("Sie haben keine Zeichen eingegeben!");    
             return 
    x;                                                        }
              try                                                
                {
               
    int s Integer.parseInt(x); 
               
    int t Integer.parseInt(y);         
               if (
    s<|| t<|| s<t)                             
                   {
                   
    System.out.println("Die eingegebene Zahl liegt ausserhalb des Wertebereiches 0 < k < n !"); 
                   return 
    x;       }
                   else                                             
                      {
                      return 
    x;                               
                      }
                 } 
                 catch(
    Exception e)                                 
                    {
                        
    System.out.println("Sie haben keine ganze Zahl eingegeben.");  
                        return 
    x;    
                    }
            }
        }
        
        
        
       public static 
    void main(String[] args)
       {
       
            
    eingabe(args[0],args[1]);  
            
    System.out.print(stirling(args[0],args[1]));  
               
           
       }

     

  2. #2
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Hi,
    in der main schreibst Du

    System.out.print(stirling(args[0],args[1]));

    aber args[] sind Strings, während Deine stirling()-Methode als Übergabeparameter int, int erwartet.
     

  3. #3
    GreenThunder Tutorials.de Gastzugang
    Zitat Zitat von Snape
    Hi,
    in der main schreibst Du

    System.out.print(stirling(args[0],args[1]));

    aber args[] sind Strings, während Deine stirling()-Methode als Übergabeparameter int, int erwartet.
    In der Aufgabenstellung steht, dass ich die Methode so aufrufen soll, also muss ich es vorher umwandeln?!
    Hab es am Anfang der Methode versucht:

    PHP-Code:
    int x Integer.parseInt(n);
    int y Integer.parseInt(k); 
    Allerdings kam da die Fehlermeldung:

    ...AufgabeZwei.java:16: cannot resolve symbol

    symbol : method parseInt (int)

    location: class java.lang.Integer

    int x = Integer.parseInt(n);
    Soll ich die Umwandlung in der main vornehmen?
     

  4. #4
    torsch2711 torsch2711 ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Ort
    Hessen
    Beiträge
    310
    Hi,

    du versuchst gerade die int zahlen n und k wieder in nen int zu parsen.
    Da es aber keine methode Integer.parseInt(int) gibt bekommst du diesen fehler:

    Probiere es lieber mal so:

    int n1=Integer.parseInt(args[0]);
    int n2=Integer.parseInt(args[1]);

    und dieses übergibst du deiner stirling methode.

    Dieser Fehler sagt dir aus, dass es keine methode gibt, so wie du es probierst.
    Schau dir bitte mal die klasse Integer an, dann weisst du welche methoden es gibt.

    Gruss,

    Torsten.
     
    "There's nothing we have to fear, except Fear itself....."

  5. #5
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo GreenThunder,

    Wenn in der Aufgabenstellung folgendes vorgegeben ist:
    System.out.print(stirling(args[0],args[1]));

    heißt das, die stirling Methode erhält zwei Parameter als String. Diese werden dann in der Methode umgewandelt. Dann einfach mit n und k weiterarbeiten.

    also:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    public class AufgabeZwei {
        
    public static long stirling(String nstring, String kstring)                           
       {
        
       int n = Integer.parseInt(nstring);
       int k = Integer.parseInt(kstring);  
       
       long stir;                                                    
       if (n==0 && k==0)
        ...
       }
       
       
       
        static String eingabe(String x, String y)                                   
       {
         ...
        }
        
       public static void main(String[] args)
       {
            eingabe(args[0],args[1]);  
            System.out.print(stirling(args[0],args[1]));     
       }
    }

    VG Erdal
     

  6. #6
    Avatar von ishino
    ishino ishino ist offline Mitglied Gold
    Registriert seit
    Dec 2005
    Beiträge
    207
    Wenn der Aufruf der Methode so vorgegeben ist, dann halte Dich doch einfach dran:

    Code :
    1
    2
    3
    4
    5
    6
    
    public static long stirling(String n, String k)
    {
        int localN = Integer.parseInt(n);
        int localK = Integer.parseInt(k);
    ...
    }

    Beim Parsen der Strings kann es im Übrigen eine Exception geben (NumberFormatException), die Du abfangen solltest. Ansonsten wird bei komischen Kommandozeilenparametern Dein Programm mit eben dieser Exception abbrechen.
     

  7. #7
    GreenThunder Tutorials.de Gastzugang
    Oh, ich glaub ich hab da was durcheinander gebracht. Also die Methode soll, laut Aufgabenstellung, folgendermaßen deklariert werden:

    PHP-Code:
    public static long stirling(int nint k
    Wie die Methode dann in der main aufgerufen wird ist nicht vorgeschrieben.
     

  8. #8
    Registriert seit
    Apr 2004
    Ort
    Ruhrgebiet
    Beiträge
    1.582
    Na dann musst Du eben vor Aufruf der stirling()-Methode auf int parsen:
    Code :
    1
    2
    3
    4
    5
    6
    
    public static void main(String[] args) 
    {
      int iValue1 = Integer.parseInt(args[0]);
      int iValue2 = Integer.parseInt(args[1]);
      System.out.println(stirling(iValue1, iValue2));
    }

    Das Parsen noch in einen try-catch-Block, um Eingaben, die nicht ausschliesslich numerischer Art sind auszuschliessen, fertig.
     

  9. #9
    GreenThunder Tutorials.de Gastzugang
    Zitat Zitat von Snape
    Na dann musst Du eben vor Aufruf der stirling()-Methode auf int parsen:
    Code :
    1
    2
    3
    4
    5
    6
    
    public static void main(String[] args) 
    {
      int iValue1 = Integer.parseInt(args[0]);
      int iValue2 = Integer.parseInt(args[1]);
      System.out.println(stirling(iValue1, iValue2));
    }

    Das Parsen noch in einen try-catch-Block, um Eingaben, die nicht ausschliesslich numerischer Art sind auszuschliessen, fertig.

    Ok, das ist im Prinzip auch das, was torsch2711 vorgeschlagen hat.

    Anstatt des try-catch-Blocks müsste doch sicher auch ein break in der Methode "Eingabe" gehen, oder?
     

  10. #10
    TommyMo TommyMo ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    261
    Ich würde auch ein try-catch Gerüst basteln. Warum etwas neu erfinden, dass schon existiert Programmierer sind oft Minimalisten ... kann ich von mir zumindest behaupten

    Gruß
    TOM
     
    alles Gute kommt von ...

  11. #11
    GreenThunder Tutorials.de Gastzugang
    Zitat Zitat von TommyMo
    Ich würde auch ein try-catch Gerüst basteln. Warum etwas neu erfinden, dass schon existiert Programmierer sind oft Minimalisten ... kann ich von mir zumindest behaupten

    Gruß
    TOM
    Da hast du recht, nur sollen solche Fehleingaben ja schon mit der Methode "Eingabe" abgefangen werden. Ich denke nicht, dass eine weitere try-catch-Anweisung, in der main, Aufgabenstellungsgerecht ist.
     

  12. #12
    TommyMo TommyMo ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    261
    Hm ... ich kann mir jetzt im Moment nicht wirklich was vorstellen. Kannst du mal deine Main posten? Also wie du denkst, dass der Aufruf oder das Programm dann aussehn sollte. Für mich macht eine Methode "eingabe()" in diesem Context auch nicht wirklich Sinn. Liegt aber sicher daran, dass ich die Aufgabenstellung noch nicht ganz verstanden habe.

    Gruß
    TOM
     
    alles Gute kommt von ...

  13. #13
    GreenThunder Tutorials.de Gastzugang
    Also die Aufgabenstellung ist folgende:

    "Erstelle ein Programm, dass unter der Nutzung einer Methode "public static long stirling(int n, int k)" die Stirling-Zahl rekursiv berechnet. Dabei werden die Werte für n und k mit der Kommandozeile übergeben und nur dann berechnet, wenn die Eingaben zulässige Zahlen sind und 0 <= k <= n!

    In der Aufgabenserie vorher hatten wir ein Methode zur zulässigen Zahleneingabe programmiert und dort stand, dass wir ab da immer diese Methode zur Eingabe ganzer Zahlen nutzen sollen.
     

  14. #14
    TommyMo TommyMo ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    261
    Naja, dann hast du ja eigentlich, wenn ich dich richtig verstanden habe, eh schon alles was du brauchst, oder nicht? Ich nehme mal an, dass die Eingabe in deiner "eingabe()" methode schon validiert wird. Du könntest ja die Methode um die try-catch Konstruktion erweitern wie oben angeführt (außer du darst sie nicht ändern, dann wird dir nichts anderes überbleiben, wenn du eine Prüfung haben willst).

    Gruß
    TOM
     
    alles Gute kommt von ...

  15. #15
    GreenThunder Tutorials.de Gastzugang
    Zitat Zitat von TommyMo
    Naja, dann hast du ja eigentlich, wenn ich dich richtig verstanden habe, eh schon alles was du brauchst, oder nicht? Ich nehme mal an, dass die Eingabe in deiner "eingabe()" methode schon validiert wird.
    Eben nicht ganz. Wenn ich Buchstaben eingebe, kommt zwar die Fehlermeldung durch meine Methode "Eingabe" aber es kommt auch ein Ausnahmefehler durch
    PHP-Code:
    int n=Integer.parseInt(args[0]); 
    in der main.
    Mein Problem ist nun, diesen Fehler in der main zu umgehen, ohne den try-catch-Block, da ja die Fehleingaben schon in der eingabe() abgeblockt werden sollen.
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Antworten: 2
    Letzter Beitrag: 13.06.09, 12:36
  3. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  4. Fehler bei "<%@ Page Language="VB" %> "
    Von Perlmann im Forum ASP
    Antworten: 4
    Letzter Beitrag: 26.09.07, 12:04
  5. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29