Zum Forum springen
java methode testen
 
Benachrichtigungen
Alles löschen

[Geschlossen] java methode testen

11 Beiträge
7 Benutzer
0 Reactions
2,531 Ansichten
Spitzbuben
Beigetreten: 10.04.2007

Ich habe eine Methode geschrieben die testet ob eine zahl eine quadratzahl ist , oder nicht. bei quadratzahl liefert die methode true ansonsten false. jetzt möchte ich diese methode in ein programm einbauen. das programm soll die ersten tausend quadratzahlen ausgeben... ich bekomms nicht hin das im fall das die methode true ausgibt auch die zahl vom programm ausgegeben wird.. hier ein versuch.. kann sein das es kompletter müll ist... bin noch anfänger...:

import javax.swing.JOptionPane;
class SchleifenWhile {

public static void main (String[] args) {

int x = 1;

while ( x < 1001) {
SchleifenMethode.isSquare(x);
if ( isSquare () ) {
System.out.println ( x ); }
x++; }

}
}


10 Antworten
brom0815
Beigetreten: 12.02.2007

Post mal die Methode mit. So wie du es versuchst hat isSquare() in der if-Abfrage keinen Wert. IsSqare() ist ja eine Methode und du verwendest sie in der if -Abfrage wie eine Variable.

Entweder direkt die Funktion aufrufen mit der zu testenden Variable x

if(SchleifenMethode.isSqare(x)){

System.out.println(x);

}

oder du machst eine Variable die dir das Ergebnis der Funktion zwischenspeichert.

bool bIsSqare = SchleifenMethode.isSquare(x);

if(bIsSqare){

System.out.println(x);

}


Original von brom0815
Post mal die Methode mit. So wie du es versuchst hat isSquare() in der if-Abfrage keinen Wert.

Genau. Du führst zwar die Methode isSquare() vorher aus, aber ihr "Ergebnis" wird nirgendswo gespeichert.
Das "Ergebnis" sollte dann ein boolscher Rückgabewert der Funktion sein, der false ist, falls es keine Quadratzahl ist, und true, falls es eine ist.


rook
Beigetreten: 07.05.2006

ungetestet:

class Square {

	public static void main (String[] args) {

		int x = 1;

		while (x <= 1000) {
			if (Square.isSquare(x))
				System.out.println ( x );
			x++;
		}

	}

	private static boolean isSquare(int x) {
		if (Math.sqrt(x) == (int)Math.sqrt(x))
			return true;
		return false;
	}
} 

Spitzbuben
Beigetreten: 10.04.2007

hier ist noch die methode...:

import javax.swing.JOptionPane;
class SchleifenMethode {

static int n;
public static boolean isSquare (int n) {

int x = 1, z = 1;
boolean quadratzahl;
n = Integer.parseInt(JOptionPane.showInputDialog(" n = "));

while (z != n && z <= n) {
z = 1;
z = x * x;
x++; }

if (z == n) { quadratzahl = true; }

else{ quadratzahl = false; }
System.out.println ( quadratzahl);
return quadratzahl;

}

public static void main(String []args) {

isSquare(n);

}
}


public class SquareCheckerApp
{
	public SquareCheckerApp()
	{}

	public void run()
	{
		for(int i = 0; i < 1000;i++)
		{
			if(isSquare(i))
			{
				System.out.println(i);
			}
		}
	}

	public static boolean isSquare(int n)
	{
		int sqrt = 0;
		for(;sqrt*sqrt < n;sqrt++)
		{}
		if(sqrt*sqrt == n)
		{
			return true;
		}
		return false;
	}

	public static int main(String[] argV)
	{
		SquareCheckerApp app = new SquareCheckerApp();
		app.run();

		return 0;
	}
}

ungestestet.
hab ewig kein java mehr gemacht, daher keine garantie für die syntax.


Spitzbuben
Beigetreten: 10.04.2007

habs mal versucht mit ner variable aber läuft irgwie nicht...

import javax.swing.JOptionPane;
class SchleifenWhile {

public static void main (String[] args) {

int x = 1;
bool numm = SchleifenMethode.isSquare(x);
while ( x < 1001) {

if(numm){

System.out.println(x); }

x++; }

}
}


frib
Beigetreten: 26.08.2006
public class SquareTester {

	public static boolean checkSq(int x) {
			if(((int)Math.sqrt(x) * (int)Math.sqrt(x)) == x)
				return true;
		return false;
	}
	
	public static void main(String[] args) {
		for(int i = 1; i < 1001; i++) {
			if(checkSq(i))
				System.out.println(i);
		}

	}
}

Getestet und funktioniert.
@ Spitzbuben: Dein Code ist nicht zu bewerten, wenn du die Methode bzw. die Klasse davon (warum packst du die in ne andere Class?) nicht mitpostest

edit: rook's isSq gefällt mir sogar nochn Tick besser, weil eine Multiplikation weniger durchgeführt werden muss


Spitzbuben
Beigetreten: 10.04.2007

Mach das weil ich nicht ganz freie hand hab... muss die aufgabenstellung umsetzen:
Schreiben sie eine methode public static boolean ...(int n), die als parameter eine zahl n enthält und true zurückliefert, falls es sich um eine quadratzahl handelt. rufen sie diese methode anschließend in ihrem programm auf, so dass mithilfe einer for, while, do while schleife alle quadratzahlen zwischen 1 und 1000 auf der konsole ausgegeben werden. dabei sollen 10 zahlen pro zeile ausgegeben werden.
...

so das is grad mein orib... die methode liefert mir true zurück wenn ich eine zahl n einsetze und diese eine quadratzahl ist. rufe ich jetzt die methode meinem programm auf, so erscheint ein eingabefenster(der methode). gebe ich hier eine quadratzahl ein erscheint true auf der konsole und das x(im programm, das inkrementiert wird). ich dachte mir, das dass x das ich inkrementiere in die methode eingesetzt wird (also in n) und jedes mal wenn der wert true geliefert wird, sollte genau dasjenige x erscheinen, also eine quadratzahl...

ich weiß nicht was ich da fürn denkfehler drin hab...?


Original von Spitzbuben
habs mal versucht mit ner variable aber läuft irgwie nicht...

import javax.swing.JOptionPane;
class SchleifenWhile {

public static void main (String[] args) {

int x = 1;
while ( x < 1001) { if(SchleifenMethode.isSquare(x)){

System.out.println(x); }

x++; }

}
}

versuchs mal so


nur mal so zur info: zwei IEEE doubles per == zu vergleichen ist alles andere als gut. rundungsfehler machen das leben schwer. wobei sqrt(x) == sqrt(x) vermutlich zu einem richtigen true führt - weil der der weg zur wurzel derselbe ist. allerdinfs zweimal SQRT aufzurufen burns cpu cycles. daher folgender code:

boolean isSqare(int x ) {
double s = Mat.sqrt(x);
return (int)(s*s) == x; // x*x ist double also nach int casten
}

syntaxfehler dürfen behalten werden :-)