2012-01-29 7 views
20

Non riesco a eseguire il codice seguente in Eclipse. Ho un metodo principale e questo è il file attualmente aperto. Ho anche provato l'opzione "Esegui come" ma continuo a ricevere questo errore: "l'editor non contiene un tipo principale". Cosa sto facendo di sbagliato qui?Errore Eclipse: "Editor non contiene un tipo principale"

public class cfiltering { 

    /** 
    * @param args 
    */ 

    //remember this is just a reference 
    //this is a 2d matrix i.e. user*movie 
    private static int user_movie_matrix[][]; 

    //remember this is just a reference 
    //this is a 2d matrix i.e. user*user and contains 
    //the similarity score for every pair of users. 
    private float user_user_matrix[][]; 


    public cfiltering() 
    { 
     //this is default constructor, which just creates the following: 
     //ofcourse you need to overload the constructor so that it takes in the dimensions 

     //this is 2d matrix of size 1*1 
     user_movie_matrix=new int[1][1]; 
     //this is 2d matrix of size 1*1 
     user_user_matrix=new float[1][1]; 
    } 

    public cfiltering(int height, int width) 
    { 
     user_movie_matrix=new int[height][width]; 
     user_user_matrix=new float[height][height]; 
    } 


    public static void main(String[] args) { 
     //1.0 this is where you open/read file 
     //2.0 read dimensions of number of users and number of movies 
     //3.0 create a 2d matrix i.e. user_movie_matrix with the above dimensions. 
     //4.0 you are welcome to overload constructors i.e. create new ones. 
     //5.0 create a function called calculate_similarity_score 
     //you are free to define the signature of the function 
     //The above function calculates similarity score for every pair of users 
     //6.0 create a new function that prints out the contents of user_user_matrix 

     try 
     { 
      //fileinputstream just reads in raw bytes. 
      FileInputStream fstream = new FileInputStream("inputfile.txt"); 

      //because fstream is just bytes, and what we really need is characters, we need 
      //to convert the bytes into characters. This is done by InputStreamReader. 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      int numberOfUsers=Integer.parseInt(br.readLine()); 
      int numberOfMovies=Integer.parseInt(br.readLine()); 

      //Now you have numberOfUsers and numberOfMovies to create your first object. 
      //this object will initialize the user_movie_matrix and user_user_matrix. 

      new cfiltering(numberOfUsers, numberOfMovies); 

      //this is a blankline being read 
      br.readLine(); 
      String row; 
      int userNo = 0; 
      while ((row = br.readLine()) != null) 
      { 
       //now lets read the matrix from the file 
       String allRatings[]=row.split(" "); 
       int movieNo = 0; 
       for (String singleRating:allRatings) 
       { 
        int rating=Integer.parseInt(singleRating); 
        //now you can start populating your user_movie_matrix 
        System.out.println(rating); 
        user_movie_matrix[userNo][movieNo]=rating; 
        ++ movieNo; 
       } 
       ++ userNo; 
      } 
     } 
     catch(Exception e) 
     { 
      System.out.print(e.getMessage()); 
     } 
    } 

} 
+3

Qual è il nome del file che contiene questo codice? – Zyerah

+0

cfiltering.java – JJJ

+1

Penso che questa sia una domanda perfettamente valida. In effetti, mi sono imbattuto in questo e ho capito il mio problema: avevo creato una classe (erroneamente) sotto la cartella sorgente: src/main/test, ed eclipse non poteva occuparsene. Quando l'ho creato correttamente sotto src/test/java, allora questo errore è andato via. – Jack

risposta

20

Provare a chiudere e riaprire il file, quindi premere Ctrl+F11.

Verificare che il nome del file in esecuzione sia uguale al nome del progetto in cui si sta lavorando e che il nome della classe pubblica in quel file sia lo stesso del nome del progetto che si sta lavorando pure.

Altrimenti, riavviare Eclipse. Fammi sapere se questo risolve il problema! Altrimenti, commenta e cercherò di aiutarti.

+0

Ora che l'ho eseguito nel mio codice, non ricevo errori. Prova a ricreare il progetto? – Zyerah

+1

Sembra aver fatto il trucco, grazie! – JJJ

+2

Il riavvio mi ha aiutato, se è di interesse di alcuni corpi. – kiltek

3

Hai importato i pacchetti per la lettura di file.

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

anche qui

cfiltering(numberOfUsers, numberOfMovies); 

Si sta tentando di creare un oggetto o chiamando un metodo?

anche un'altra cosa:

user_movie_matrix[userNo][movieNo]=rating; 

si sta assegnando un valore ad un membro di un'istanza come se fosse una variabile statica rimuovere anche il Th in

private int user_movie_matrix[][];Th 

Spero che questo aiuti.

+0

Sto provando a chiamare il metodo che modifica le dimensioni di "user_movie_matrix" e "user_user_matrix" – JJJ

+0

oh capisco ... quindi cosa dovresti fare è – bernabas

+0

oh capisco ... quindi quello che dovresti fare è creare una classe metodo come'set_user_movie_matrix (x, y) {this.userNo = x; this.movieNo = y;} ''per modificare quei valori di un oggetto ...poi invece di creare un oggetto senza nome fai 'cfiltering nome_variabile = nuovo cfiltering (numberOfUsers, numberOfMovies); ' e poi usando quella variabile chiama i metodi come' nome_variabile.set_utente_movie_matrix (utenteNo, filmNo)' – bernabas

1

private int user_movie_matrix[][];Th. dovrebbe essere `private int user_movie_matrix[][];.

private int user_movie_matrix[][]; dovrebbe essere private static int user_movie_matrix[][];

cfiltering(numberOfUsers, numberOfMovies); dovrebbe essere new cfiltering(numberOfUsers, numberOfMovies);

o meno il codice funziona come previsto dopo questi cambiamenti è oltre la portata di questa risposta; c'erano diversi errori di sintassi/scoping.

+0

Non intendevo per user_movie_matrix essere una variabile statica. Deve essere statico perché funzioni correttamente? – JJJ

+0

Deve essere statico mentre il codice è scritto, perché ** lo ** si accede direttamente da un metodo statico, ovvero 'public static void main (String [] args)'. –