GithubHelp home page GithubHelp logo

java-util's People

Watchers

 avatar

java-util's Issues

Recherche dans un tableau

Salut @lucky777code,

Je sais que ça fait déjà longtemps que tu as écrit ceci:

https://github.com/lucky777code/Java-util/blob/59ff863c67b2c97858a049bcfbda0f1f0a6bff24/findArray.java#L16-L22

(on trouve les même ligne ici également) mais je pensais que je pourrais te faire l'une ou l'autre remarque et te proposer une méthode plus moderne.

Tout d'abord, un tableau java connait sa longueur

String[] tab = /* peu importe */;
int longueur = tab.length;

En s'inspirant de la librairie standard du langage rust, on peut écrire quelque chose comme ce qui suit.
On crée une énumération

public enum SearchResult
{
  Found,
  NotFound
}

et une classe (je ne sais pas si tu as déjà vu les types génériques mais sinon je pense que c'est facile à comprendre en lisant le code)

public class Search<T>
{
  // Le résultat de la recherche
  private SearchResult result;

  // La valeur trouvée dans le cas ou le résultat est Found
  private T foundValue;
  
  /*
  * Constructeur privé dans le but d'empêcher l'utilisateur de créer un objet 
  * avec le résultat Found et une valeur non null dans foundValue.
  */
  private Search() {}
  
  /*
  * Résultat de recherche positif avec valeur.
  */
  public static <T> Search<T> found(T foundValue)
  {
    Search<T> s = new Search<T>();
    s.result = SearchResult.Found;
    s.foundValue = foundValue;
    return s;
  }

  /*
  * Résultat de recherche négatif
  */
  public static <T> Search<T> notFound()
  {
    Search<T> s = new Search<T>();
    s.result = SearchResult.NotFound;
    return s;
  }
  
  /*
  * Accesseur de la valeur. Lance une exception (tu as vu les exceptions ?) si le résultat est négatif.
  */
  public T getValue()
  {
    if (this.result == SearchResult.NotFound)
      throw new IllegalStateException();
    return foundValue;
  }

  /*
  * Accesseur du résultat.
  */
  public SearchResult getResult()
  {
    return result;
  }

  /*
  * Affichage du résultat.
  */
  public String toString()
  {
    if (getResult() == SearchResult.Found)
    {
      return "Found: " + getValue();
    }
    else
    {
      return "NotFound";
    }
  }
}

Ensuite la fonction de recherche peut s'écrire:

public static <T> Search<Integer> search(T[] arr, T value)
{
  int idx = 0;
  while (true)
  {
    if (idx == arr.length)
      return Search.notFound();
    if (arr[idx] == value)
      return Search.found(idx);
    idx += 1;
  }
}

Alors tu vas me dire que ça fait beacoup de code pour pas grand chose à quoi je te répondrai que la classe Search peut reservir dans d'autres cas (comme une recherche d'un fichier dans un dossier ou une recherche d'un élément dans un dictionnaire ou dans un arbre ou dans un graphe ou dans une DB etc.

Autre chose, tu remarqueras peut-être que l'énumération SearchResult pourrait être remplacée par un boolean mais je l'ai laissée parce qu'on pourrait alors ajouter des résultats comme AlmostFound ou CollectionEmpty (à utiliser avec java.util.EnumSet par ex).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.