java methode testen

    • Spitzbuben
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      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
      brom0815
      Bronze
      Dabei seit: 12.02.2007 Beiträge: 2.505
      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);

      }
    • EcaFaYn
      EcaFaYn
      Bronze
      Dabei seit: 25.05.2009 Beiträge: 483
      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
      rook
      Bronze
      Dabei seit: 07.05.2006 Beiträge: 250
      ungetestet:

      code:
      
      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
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      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);

      }
      }
    • pokersille
      pokersille
      Bronze
      Dabei seit: 28.01.2008 Beiträge: 565
      code:
      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
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      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
      frib
      Bronze
      Dabei seit: 26.08.2006 Beiträge: 3.268
      code:
      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
      Spitzbuben
      Black
      Dabei seit: 10.04.2007 Beiträge: 1.281
      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...?
    • pokersille
      pokersille
      Bronze
      Dabei seit: 28.01.2008 Beiträge: 565
      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
    • DrHackenbush
      DrHackenbush
      Bronze
      Dabei seit: 08.01.2006 Beiträge: 355
      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 :-)