2016-10-06 4 views
-1

Je travaille sur une tâche pour mon cours. On m'a demandé de créer une méthode d'index valide qui vérifiait si l'int entré était un index valide pour mon ArrayList. Cette méthode compilé bien et a bien fonctionné.Erreur Java "Impossible de trouver le symbole - méthode (validIndex)"

Un autre exercice m'a demandé d'utiliser ensuite cette méthode validIndex dans d'autres méthodes. J'ai essayé de le faire dans ma méthode removeFile. La méthode removeFile est destinée à appeler la méthode validIndex afin de vérifier si le paramètre index de removeFile est un index valide pour ArrayList. Cependant mon dossier refuse maintenant de compiler me donner l'erreur

symbole ne peut pas trouver -

méthode validIndex() Le code est ci-dessous:

import java.util.ArrayList; 

/** 
* A class to hold details of audio files. 
* 
* @author David J. Barnes and Michael Kölling 
* @version 2011.07.31 
*/ 
public class MusicOrganizer 
{ 
    // An ArrayList for storing the file names of music files. 
    private ArrayList<String> files;  
    /** 
    * Create a MusicOrganizer 
    */ 
    public MusicOrganizer() 
    { 
     files = new ArrayList<String>(); 
    } 

    /** 
    * Add a file to the collection. 
    * @param filename The file to be added. 
    */ 
    public void addFile(String filename) 
    { 
     files.add(filename); 
    } 

    /** 
    * Return the number of files in the collection. 
    * @return The number of files in the collection. 
    */ 
    public int getNumberOfFiles() 
    { 
     return files.size(); 
    } 

    /** 
    * List a file from the collection. 
    * @param index The index of the file to be listed. 
    */ 
    public void listFile(int index) 
    { 
     if(index >= 0 && index < files.size()) { 
      String filename = files.get(index); 
      System.out.println(filename); 
     } 
    } 

    /** 
    * Remove a file from the collection. 
    * @param index The index of the file to be removed. 
    */ 
    public void removeFile(int index) 
    { 
     if(files.validIndex() = true){ 
      files.remove(index); 
     } 
    } 

    // Problem with this method. If ArrayList is empty then the indexes variable returns minus 1 
    public void checkIndex(int index) 
    { 
     int size = files.size(); 
     int indexes = size - 1; 
     if (index >= 0 && index <= indexes){ 
      System.out.println(""); 
     } 
     else { 
      System.out.println("That is not a valid index number."); 
      System.out.println("The index should be between 0 and " + indexes); 
     } 
    } 

    public boolean validIndex(int index) 
    { 

     if (index >= 0 && index <= files.size()-1){ 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 



} 

Si quelqu'un pouvait indiquer pourquoi mon le code ne compilera pas ce qui serait apprécié.

+1

Je pense que vous vouliez dire utiliser 'validIndex (index)' au lieu de 'files.validIndex() = true'. 'files' est un' List' qui ne contient pas cette méthode. – Zircon

+0

Vous avez implémenté la méthode 'validIndex() 'avec un paramètre de type int. Vous essayez d'appeler cette méthode sans aucun paramètre. C'est une grande différence, afin que vous puissiez remplacer les méthodes. – reporter

+1

Il est hors de portée, mais validIndex peut avoir une ligne - juste 'index> = 0 && index <= files.size() - 1'.Vous apprenez, alors peut-être que cela aidera à améliorer la lisibilité de votre code :) –

Répondre

1

Si vous essayez d'appeler votre propre méthode validIndex, vous l'appelez incorrectement.

Pour appeler votre méthode validIndex, vous devez faire ce qui suit:

public void removeFile(int index) 
    { 
     if(this.validIndex(index)){ 
      files.remove(index); 
     } 
    } 

Notez que files est un objet de la classe ArrayList. Ainsi, les états

files.validIndex() 

des points à la méthode appelée validIndex() dans la classe ArrayList, qui n'existe pas. La méthode existe dans votre classe, donc la seule façon d'y accéder est avec l'objet courant. Modifier l'instruction if à

if(this.validIndex(...) == true){ ... } 

ou simplement

if(validIndex(...) == true){ ... } 
+0

Merci, ça marche! Puis-je vous demander une petite explication de pourquoi cela fonctionne bien? Est-ce que les appels de méthodes aux méthodes de la même classe nécessitent toujours le préfixe this dans java? – ed2101

+0

@ ed2101 Non, vous n'avez pas besoin d'ajouter 'this'. Il est très utile si vous avez un champ nommé 'test' et que le paramètre method est aussi appelé' test' et que vous voulez accéder au champ, pas au paramètre. Ici, ceci peut être omis –

0

cette ligne.

if(files.validIndex() = true){ 

1) Quel index est un index valide? Vous devez utiliser un paramètre, tel que défini par la méthode validIndex

2) files ne dispose pas d'une méthode validIndex, car il est un objet List. Votre méthode est définie dans votre classe actuelle, donc ne préfixez pas l'appel de méthode avec files. Vous pouvez éventuellement le remplacer par this

3) Vous utilisez une opération d'affectation, pas une condition booléenne. Supprimez-le car la recherche de true est redondante ou utilisez deux équivalents

So.

if (validIndex(index)) {