Fehler: "cannot be applied to"

G

GreenThunder

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:
import java.io.*;											
import java.lang.*;                 

public class AufgabeZwei {
    
public static long stirling(int n, int k)                           
   {
   long stir;                                                    
   if (n==0 && 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 x, String 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<0 || t<0 || 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]));  
	       
	   
   }
}
 
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.
 
Snape hat gesagt.:
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:
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?
 
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.
 
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:
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
 
Wenn der Aufruf der Methode so vorgegeben ist, dann halte Dich doch einfach dran: :-)

Code:
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.
 
Oh, ich glaub ich hab da was durcheinander gebracht. Also die Methode soll, laut Aufgabenstellung, folgendermaßen deklariert werden:

PHP:
public static long stirling(int n, int k)

Wie die Methode dann in der main aufgerufen wird ist nicht vorgeschrieben.
 
Na dann musst Du eben vor Aufruf der stirling()-Methode auf int parsen:
Code:
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.
 
Snape hat gesagt.:
Na dann musst Du eben vor Aufruf der stirling()-Methode auf int parsen:
Code:
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?
 
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 :p

Gruß
TOM
 

Neue Beiträge

Zurück