2 votes

Java - Comment vérifier si un nombre entier saisi est unique ?

En gros, mon code prend une entrée de l'utilisateur et utilise une méthode pour vérifier si l'entrée est unique. S'il n'est pas unique, il demande à l'utilisateur d'en saisir un autre.

Mon idée :

import java.util.Scanner;
public class testing {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[] input = new int[10];

        for (int i = 0; i < 10; i++) {

            while (true) {
                int n = sc.nextInt();
                for (int j = 0; j < input.length; j++) {
                    input[j] = n;
                    checkunique(input);
                    System.out.println("Choose a different one");
                }
                break;
            }
        }

        public static boolean checkunique(int[] Array) {
            for (int i = 0; i < Array.length - 1; i++) {
                for (int j = 1 + 1; j < Array.length; j++) {
                    if (Array[i] == Array[j]) {
                        return true;
                    }
                }
            }
            return false;
        }
    }
}

Et désolé, je n'arrive pas à comprendre le reste à partir de maintenant.

1voto

LAD Points 1701

Vous pourriez vérifier si la valeur saisie est la même qu'une autre dans le tableau avant de l'ajouter au tableau. Pour ce faire, votre méthode de vérification doit prendre deux paramètres, comme ceci :

public static boolean checkunique(int testValue, int[] array) {
    for (int i = 0; i < array.length; i++) {
        if (testValue == array[i]) {
            return false;
        }
    }
    return true;
}

Alors, appelez le checkunique avant de mettre la valeur dans le tableau et si la méthode retourne true Dans le cas contraire, il faut demander à l'utilisateur de saisir une autre valeur. Vous pouvez faire quelque chose comme ça pour votre main méthode :

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] input = new int[10];

    for (int i = 0; i < input.length; i++) {
        int n = sc.nextInt();

        boolean loop = true;
        do {
            if (checkunique(n, input)) {
                // If true
                input[i] = n;
                loop = false;
            } else {
                // If false
                System.out.println("Choose a different one.");
                n = sc.nextInt();
            }
        } while (loop);
    }
}

Note : Comme le tableau initial est composé de zéros, entrer un zéro sera considéré comme un doublon. Si vous voulez corriger cela, il suffit d'initialiser les valeurs du tableau à une valeur par défaut de votre choix.

1voto

MithunS Points 403

Voici un moyen de le faire. Vous pouvez maintenir un Set , où vous stockez les entrées de l'utilisateur, les Sets en java ne permettent que des données uniques. Ainsi, tout ce que vous avez à faire est de vérifier si l'utilisateur a entré un nombre qui existe déjà dans votre Set ou non.

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class SOTest {

    private static Set<Integer> uniqueInput = new HashSet<>();

    public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {

            while (true) {
                System.out.println("Choose a number:-");
                int n = sc.nextInt();

                if (!uniqueInput.contains(n)) {
                    uniqueInput.add(n);
                    if(uniqueInput.size()==10) break;
                } else {
                    System.out.println("Duplicate input");
                    continue;
                }
            }
        }
        for(Object i:uniqueInput.toArray()) {
            System.out.print(i+" ");
        }
    }
}

0voto

Bryan Jin Points 13

Le code que vous publiez devrait être parfait. Si vous avez un très grand nombre d'utilisateurs, vous pouvez utiliser le code suivant HashMap .

0voto

thiruclassic Points 71

Vous pouvez utiliser Définir pour ajouter les éléments et vérifier s'ils sont uniques. Chaque fois que vous ajoutez un élément dans l'ensemble en utilisant la fonction add, si le même élément est ajouté à nouveau, elle renvoie true. Ainsi, vous serez en mesure d'informer l'utilisateur de choisir un autre élément.

0voto

Simeon Ikudabo Points 1321
import java.util.*;

class InputChecker {

   public static boolean checkInput(String[] a, String b) {
       boolean isIn = false;
       for(int x = 0; x < a.length - 1; x++) {
           if(x == 1) {
              if(a[1].equals(a[0]))
                   isIn = true;
        }

        if(a[a.length - 1].equals(a[x]))
            isIn = true;
       }
        return isIn;
}

}

public class MainChecker {

   public static void main(String[] args){
        Scanner receive = new Scanner(System.in);
        InputChecker check = new InputChecker();
        ArrayList<String> checkMe = new ArrayList<String>();
        ArrayList<String> validEntry = new ArrayList<String>();
        while(true) {
        System.out.println("Please enter some input, or end to quit: ");
        String userInput = receive.nextLine();
        if(! userInput.equals("end")) {
                checkMe.add(userInput);
                String[] k =  new String[checkMe.size()];
                k = checkMe.toArray(k);
                boolean bool = check.checkInput(k, userInput);
                if(bool) {
                    System.out.println("Please enter another input: ");
                }
                else {
                    System.out.println("Input stored!");
                    validEntry.add(userInput);
                }

        }

        }

    }

}

Voici votre résultat :

Please enter some input, or end to quit: 
Sim
Input stored!
Please enter some input, or end to quit: 
Yo
Input stored!
Please enter some input, or end to quit: 
Sim
Please enter another input: 
Please enter some input, or end to quit: 
Yo
Please enter another input: 
Please enter some input, or end to quit: 

Explication : Dans cet exemple, nous avons simplement créé une autre classe avec une méthode qui peut effectuer la vérification pour vous. Nous stockons les entrées de l'utilisateur dans une liste de tableaux (ArrayList), puis nous convertissons cette liste de tableaux en un tableau de chaînes de caractères (String) dans notre programme principal. Nous pouvons passer ce tableau à la méthode que nous avons créée dans l'autre classe lorsque nous appelons cette méthode dans notre classe principale, et nous pouvons vérifier si l'entrée actuelle est déjà dans le tableau qui a été passé à notre méthode. Nous utiliserons une valeur booléenne dans la méthode que nous avons créée comme un "drapeau" et si ce "drapeau" vaut "vrai", nous saurons que l'entrée de l'utilisateur est déjà dans le tableau. Nous utilisons ensuite ce drapeau comme test conditionnel dans notre programme principal. S'il vaut "true", nous savons que l'entrée de l'utilisateur a déjà été stockée. Si l'entrée de l'utilisateur est déjà dans ce tableau, nous demanderons à l'utilisateur d'en faire d'autres, et nous ne les stockerons pas dans notre tableau de stockage principal. Cependant, si l'entrée de l'utilisateur est "unique", nous confirmerons que l'entrée a été stockée et la placerons dans notre tableau principal. C'est l'essentiel du programme, et comme vous pouvez le voir, le décomposer en classes et méthodes peut être utile ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X