Methoden

orangata

Mitglied
Folgende Aufgabe sollte gelöst werden:
Schreiben Sie eine Java-Klasse Teilbarkeit, die die unter 1. bis 3. genannten Methoden besitzt. Schrei- ben Sie dazu eine Testklasse, in der Sie die in der Klasse Teilbarkeit deklarierten Methoden testet.
1. Methode public static boolean istTeiler(int x, int y) mit zwei ganzzahligen Parame- tern, die als Ergebnis liefert, ob der Wert des ersten Parameters durch den zweiten teilbar ist.
2. Methode public static int teilerVielfachheit(int x,int y) mit zwei ganzzahligen Pa- rametern, die als Ergebnis liefert, wie oft der Wert des erste Parameter durch den zweiten teilbar ist.
3. Methode public static int power(int x, int y) mit zwei ganzzahligen Parametern, die als Ergebnis den Wert des ersten Parameters mit dem zweiten potenziert.

Das geschriebene Programm soll dies wiedergeben; es läuft aber nicht :)
Java:
//Diese Programm beinhaltet eine Klasse mit mehreren Methoden zum Thema Teilbarkeit
public class Teilbarkeit
	{
		public static boolean ist Teiler(int x, int y)	//gibt aus, ob x durch y teilbar ist (ganze Zahl betrachtet)
			{ boolean type;
				if ( x % y==0)			/*Wenn der Rest der Division von x und y 0 betraegt, wird true fuer type definiert.
											Andernfalles gilt type=false*/
					{type = true;}
				else 
					{type = false;}
				return type;
			}
	
		public static int teilerVielfachheit(int x, int y)	//gibt aus wie oft x durch y teilbar ist (ganze Zahl betrachtet)
			{
				int i=0;
				while (x>0)		/*Wenn der Rest der Division von x und y 0 betraegt, wird die Zaehlvariable i
										um 1 erhoeht, solange bis der Rest ungleich 0 ist*/
					{
						while(x%y==0)
						{x= x-y;
						}
						i=i+1;
					}
				return i;
			}
	
		public static int power(int x, int y)		//multipliziert x solange mit sich selbst, bis die Zaehlvariable j=y ist (x^y)
			{
				int j=1;
				while (j<y)
					{
						x=x*x;
					}
				return x;
			}
			
		//Am Ende jeder Methode wird die zugehoerige Variable zurueckgegeben
	}

Wo liegen meine Fehler?
 

faetzminator

Gesperrter Benutzer
Wie wärs, wenn du uns die Fehlermeldungen posten würdest ;) ? Oder zuerst versuchen, diese zu interpretieren.
Was mir gerade auffällt, ohne den Code näher anzuschauen, ist der invalide Methodenname [c]ist Teiler[/c], welcher [c]istTeiler[/c] heissen müsste.
 

orangata

Mitglied
Folgende Meldung erhalte ich :

Teilbarkeit.java:4: ';' expected
public static boolean ist Teiler(int x, int y) //gibt aus, ob x durch y teilbar ist (ganze Zahl betrachtet)
^
Teilbarkeit.java:4: invalid method declaration; return type required
public static boolean ist Teiler(int x, int y) //gibt aus, ob x durch y teilbar ist (ganze Zahl betrachtet)
^
2 errors
speedport_w_723v_typ_a:programme MACINTOSH$
 

faetzminator

Gesperrter Benutzer
Genau der Fehler, welchen ich prophezeite. Erste Fehlermeldung kommt, weil der Compiler wegen dem Space denkt, [c]ist[/c] ist eine statische Variable des Types boolean. Da müsste ein ; oder eine Zuweisung folgen. Die Zweite Fehlermeldung kommt, weil er danach erkannt, dass es eine Methodendeklaration sein soll, aber diese wegen des inkorrekten Spaces nicht interpretieren kann.
 

dehlen

Bekanntes Mitglied
Du machst dir das Leben unnötig schwer ;)
Anstatt die boolean variable type zu deklarieren geb einfach true oder false zurück.
In der zweiten Methode einfach x/y zurückgeben, denn bei ints ist z.B 12:7 = 1, weil es bei int keine Kommazahlen gibt.
Bei power benutz einfach die Methode Math.pow(x,y).
 

orangata

Mitglied
So , ich habe jetzt "istTeiler" erst einmal verändert.

Java:
//Diese Programm beinhaltet eine Klasse mit mehreren Methoden zum Thema Teilbarkeit
public class Teilbarkeit
	{
		public static boolean istTeiler(int x, int y)	//gibt aus, ob x durch y teilbar ist (ganze Zahl betrachtet)
			{ boolean type;
				if ( x % y==0)			/*Wenn der Rest der Division von x und y 0 betraegt, wird true fuer type definiert.
											Andernfalles gilt type=false*/
					{type = true;}
				else 
					{type = false;}
				return type;
			}
	
		public static int teilerVielfachheit(int x, int y)	//gibt aus wie oft x durch y teilbar ist (ganze Zahl betrachtet)
			{
				int i=0;
				while (x>0)		/*Wenn der Rest der Division von x und y 0 betraegt, wird die Zaehlvariable i
										um 1 erhoeht, solange bis der Rest ungleich 0 ist*/
					{
						while(x%y==0)
						{x= x-y;
						}
						i=i+1;
					}
				return i;
			}
	
		public static int power(int x, int y)		//multipliziert x solange mit sich selbst, bis die Zaehlvariable j=y ist (x^y)
			{
				int j=1;
				while (j<y)
					{
						x=x*x;
					}
				return x;
			}
			
		//Am Ende jeder Methode wird die zugehoerige Variable zurueckgegeben
	}

Aber es läuft nicht, Fehlermeldung lautet: main fehlt.
 

dehlen

Bekanntes Mitglied
Ok also das steht in jedem Lehrbuch auf Seite 1. Google mal bitte danach ;)

Testweise könnte deine main Methode z.B so aussehen:
Java:
public static void main(String[] args) {
		System.out.println("istTeiler: 12:4 = "+istTeiler(12,4));
		System.out.println("teilerVielfachheit: 12:4 = "+teilerVielfachheit(12,4));
		System.out.println("power: 5^5 = "+power(5,2));
	}

Hast du dir meine Verbesserungsvorschläge durchgelesen ?
 

TKausL

Top Contributor
Java:
public class Teilbarkeit
    {

       public static void main(String[] args){
           System.out.println("Do anything...");
        }
        public static boolean istTeiler(int x, int y)   //gibt aus, ob x durch y teilbar ist (ganze Zahl betrachtet) {
                return x%y==0;
            }
    
        public static int teilerVielfachheit(int x, int y)  //gibt aus wie oft x durch y teilbar ist (ganze Zahl betrachtet)
            {
                int i=0;
                while (x>0)     /*Wenn der Rest der Division von x und y 0 betraegt, wird die Zaehlvariable i
                                        um 1 erhoeht, solange bis der Rest ungleich 0 ist*/
                    {
                        while(x%y==0)
                        {x= x-y;
                        }
                        i=i+1;
                    }
                return i;
            }
    
        public static int power(int x, int y)       //multipliziert x solange mit sich selbst, bis die Zaehlvariable j=y ist (x^y)
            {
                return Math.pow(x, y);
            }
            
        //Am Ende jeder Methode wird die zugehoerige Variable zurueckgegeben
    }
 

orangata

Mitglied
Ok, danke erst einmal.
Die Test Klasse zu Teilbarkeit sieht dann so aus:

Java:
public class Test
	{
		public static void main (String[]args)
			{
				int x=8;
				int y=2;
				
				int i;
				i= Teilbarkeit.teilerVielfachheit(x,y);
				System.out.println(i);
				
				boolean type;
				type= Teilbarkeit.istTeiler(x,y);
				System.out.println(type);
				
				x= Teilbarkeit.power(x,y);
				System.out.println(x);
				
			}
	}

Ist die korrekt?
 

dehlen

Bekanntes Mitglied
Und wieso nicht so ?!
Java:
public class Teilbarkeit
{
	public static boolean istTeiler(int x, int y)
	{ 
		if ( x % y==0)        
										
		{return true;}
		else 
		{return false;}
	}

	public static int teilerVielfachheit(int x, int y)  
	{
		int i = x/y;
		return i; 
	}

	public static double power(int x, int y)     
	{
		double z = Math.pow(x,y);
		return z;            
	
	}

	public static void main(String[] args) {
		System.out.println("istTeiler: 12:4 = "+istTeiler(12,4));
		System.out.println("teilerVielfachheit: 12:4 = "+teilerVielfachheit(12,4));
		System.out.println("power: 5^5 = "+power(5,2));
	}
}
 

dehlen

Bekanntes Mitglied
beim dem Vorschlag von TKlausL steht die Klammer der Methode istTeilbar in den Kommentaren, daher gibt's nen Klammerfehler. Außerdem wird das Ergebnis von Matt.pow in einer int Variable gespeichert, die Methode gibt aber ein double zurück.
 

orangata

Mitglied
Hier noch einmal mit dem gleichen Problem ;)

Math.Pow sollte nicht verwendet werden, sondern int .Power zur Potenzierung.

Mit math.pow lief alles prächtig, mit int.pow, spuckt er die Potenz nicht mehr aus, gemeint ist wirklich nur die letzte, die dritte Methode:
Java:
public class Teilbarkeit
{
    public static boolean istTeiler(int x, int y) //Methode 1
    { 
        if ( x % y==0) //kommt beim Quotienten eine ganze Zahl heraus, dann ist x%y==0x      
                                        
        {return true;}
        else 
        {return false;}
    }
 
    public static int teilerVielfachheit(int x, int y) //Methode2  
    {
        int i = x/y; //'wie oft passt y in x hinein'  
        return i; 
    }
    public static int power(int x, int y)		//multipliziert x solange mit sich selbst, bis die Zaehlvariable j=y ist (x^y)
    {
        int j=1;
        while (j<y)
        {
            x=x*x;
        }
        return x;
    }    
    public static void main(String[] args) { //Testklasse
        System.out.println("istTeiler: 12:4 = "+istTeiler(12,4));
        System.out.println("teilerVielfachheit: 12:4 = "+teilerVielfachheit(12,4));
        System.out.println("power: 5^5 = "+power(5,2));
    }
}
[/Java]
 

faetzminator

Gesperrter Benutzer
[c]j[/c] muss noch jeweils um eins erhöht werden, also z.B. damit, dass man den Schleifenkopf so anpasst:
Java:
while (j++ < y)
 

TKausL

Top Contributor
Hier noch einmal mit dem gleichen Problem ;)

Math.Pow sollte nicht verwendet werden, sondern int .Power zur Potenzierung.

Mit math.pow lief alles prächtig, mit int.pow, spuckt er die Potenz nicht mehr aus, gemeint ist wirklich nur die letzte, die dritte Methode:
Java:
public class Teilbarkeit
{
    public static boolean istTeiler(int x, int y) //Methode 1
    { 
        if ( x % y==0) //kommt beim Quotienten eine ganze Zahl heraus, dann ist x%y==0x      
                                        
        {return true;}
        else 
        {return false;}
    }
 
    public static int teilerVielfachheit(int x, int y) //Methode2  
    {
        int i = x/y; //'wie oft passt y in x hinein'  
        return i; 
    }
    public static int power(int x, int y)		//multipliziert x solange mit sich selbst, bis die Zaehlvariable j=y ist (x^y)
    {
        int j=1;
        while (j<y)
        {
            x=x*x;
        }
        return x;
    }    
    public static void main(String[] args) { //Testklasse
        System.out.println("istTeiler: 12:4 = "+istTeiler(12,4));
        System.out.println("teilerVielfachheit: 12:4 = "+teilerVielfachheit(12,4));
        System.out.println("power: 5^5 = "+power(5,2));
    }
}
[/Java][/QUOTE]

1.: Was ist int.pow?
2.: Du hast eine endlosschleife in der methode. Frag dich selbst mal, warum.
 

dehlen

Bekanntes Mitglied
Naja das du Math.pow nicht verwenden darfst, können wir ja nicht riechen.
Versuch doch mal die Methode power rekursiv zu lösen, ich denke so ist das sehr einfach.
Also:
methode(basis, exponent)
if(exponent == 0) {
gib 1 zurück
}
else
gib zurück Methode(basis*exponent-1);
 

faetzminator

Gesperrter Benutzer
dehlen, er hat ja bereits einen Ansatz einer iterativen Implementierung. Mit der resursiven Lösung verwirren wir ihn höchstens noch mehr ;)
 

Neue Themen


Oben