2016-12-08 3 views
0

Ich habe ein Magic-Square-Programm gemacht und es ist getan, aber eine der Methoden in meiner Klasse kann nicht von der Hauptmethode aufgerufen werden. Ich habe zwei Methoden in der Klasse und nur eine von beiden wird nicht gefunden. noRep ist eine Methode, die sicherstellt, dass die eingegebenen Zahlen nicht wiederholt werden. Wenn ich versuche, es aus dem Hauptverfahren zu verwenden, sagt die CompilerWarum kann der Fahrer keine Methode in einer Klasse finden?

nicht Symbol Methode Norep (int [] [])

Hier ist die Klasse finden:

public class MagicClass 
{ 
    public static boolean noRep(int[][] square) 
    { 
     int[] one = new int[10]; 


     for (int i = 1; i < 10; i++) 
      one[i] = 0; 


     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 

       if (square[i][j] < 1 || square[i][j] > 9) 
        return false; 

       one[square[i][j]]++; 
      } 
     } 

     for (int i = 1; i < 10; i++) 
      if (one[i] != 1) 
       return false; 

     return true; 
} 


public static boolean checkSums(int[][] square) 
{ 
    for (int i = 0; i < 3; i++) 
    { 

     int sum = 0; 
     for (int j = 0; j < 3; j++) 
      sum += square[i][j]; 


     if (sum != 15) 
      return false; 
    } 


    for (int j = 0; j < 3; j++) 
    { 
     int sum = 0; 
     for (int i = 0; i < 3; i++) 
      sum += square[i][j]; 


     if (sum != 15) 
      return false; 
    } 


    if (square[0][0] + square[1][1] + square[2][2] != 15) 
     return false; 

    if (square[0][2] + square[1][1] + square[2][0] != 15) 
     return false; 

    return true; 
} 
} 

Hier ist die Hauptmethode:

import java.util.*; 
import java.util.Scanner; 

public class MagicSquares { 

    public static void main(String[] args) { 
    int[][] square = new int[3][3]; 
    Scanner input = new Scanner(System.in); 
    MagicClass MagicSqr = new MagicClass(); 
    //checkFrequency Frequent = new checkFrequency(square); TESTING 
    //void Fre = MagicClass.checkFrequency (square); TESTING 
    System.out.println("Please enter your magic square."); 
    for (int i = 0; i < 3; i++) 
     for (int j = 0; j < 3; j++) 
      square[i][j] = input.nextInt(); 

    if (checkSums(square && noRep(square))) 
     System.out.println("You have a magic square"); 
    else 
     System.out.println("Not a magic square"); 
} 
} 
+4

'MagicSquare.noRep' – sidgate

+0

Wie würde ich das erklären? Ich habe versucht, eine Initialisierung in eine Variable zu speichern, wusste aber nicht, welche Variable verwendet werden soll. Danke für Ihre Antwort. – Nub

+1

@ user1211, keine Notwendigkeit für Objekt, Methode ist statisch – sidgate

Antwort

3

Sie rufen noRep in einer anderen Klasse. Da es sich um eine statische Methode (Klassenmethode) handelt, wird keine Instanz benötigt. Rufen Sie es mit dem folgenden:

if (MagicClass.checkSums(square) && MagicClass.noRep(square)) 
+0

Sorry, aber ich bin mir nicht sicher, wie man 'MagicClass.noRep (square)' 'verwendet. Würde ich es durch 'noRep (Quadrat)' ersetzen? Oder würde ich es irgendwo oben platzieren? Ich bin schlecht im Umgang mit erfundenen Methoden in einer anderen Klasse. – Nub

+1

Ich habe den Code über –

+1

aktualisiert. Das wird auch nicht funktionieren. Es sollte sein, wenn (MagicClass.checkSums (Quadrat) && MagicClass.noRep (Quadrat)) –

Verwandte Themen