Как показать количество попыток и 1 считать только для того же числа, что ввод - PullRequest
0 голосов
/ 19 марта 2020

Помощь! это игра в угадывание, и у меня есть проблема, нужно напечатать количество попыток, но только один счетчик к одному и тому же числу несколько раз подряд, что вводил пользователь.

public static void main(String[] args) { 
    // TODO code application logic here

int ans,guess;
final int max = 10;


Scanner jai = new Scanner(System.in);
Random no = new Random();

int att = 0;
ans = no.nextInt(max) + 1;

while (true){
    System.out.println("Enter a number between 1 to 10");
    guess = jai.nextInt();
    att += 1;
    att;

if (guess == ans){
    System.out.println("You are correct, the answer is :"+ ans);
    System.out.println(att +" attempts to find the correct number!");
     System.exit(0);
}else if (guess > ans){
    System.out.println("Too Large");
}else if (guess < ans){
    System.out.println("Too Small"); 

например: необходимо сосчитать 5 раз. Введите число от 1 до 10 5 Too Small Введите число от 1 до 10 5 Too Small Введите число от 1 до 10 8 Too Small Введите a число от 1 до 10 9 Too Small Введите число от 1 до 10 10 Вы правы, ответ: 10 5 попыток найти правильный номер!

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Вы можете использовать Set и его неповторяющиеся значения: https://docs.oracle.com/javase/7/docs/api/java/util/Set.html.

Также не рекомендуется использовать системный выход, лучше использовать логическое значение, чтобы определить, когда выходить, пока l oop

Так что вы можете попробовать вот так:

//...
boolean correct;
Set<Integer> tries = new HashSet();
while (!correct){
    System.out.println("Enter a number between 1 to 10");
    guess = jai.nextInt();
    att ++;
    tries.add(guess);
    if (guess == ans){
        System.out.println("You are correct, the answer is :"+ ans);
        System.out.println(att +" attempts to find the correct number!");
        System.out.println(tries.size() +" unique tries");
        correct = true;
    }else if (guess > ans){
        System.out.println("Too Large");
    }else if (guess < ans){
        System.out.println("Too Small");
    }

Вы также можете использовать Set, чтобы сообщить пользователю, уже пробовал ли он этот ответ, либо проверив tries.contains(guess), либо проверив результат add(...), так как он возвращает логическое значение

0 голосов
/ 19 марта 2020

Использовал ArrayList list для хранения всех попыток, которые сделал пользователь, если он содержит номер, он не будет считаться новой попыткой. В противном случае попытка будет засчитана и добавлена ​​к list

public static void main(String[] args)
{
    int ans,guess;
    final int max = 10;


    Scanner jai = new Scanner(System.in);
    Random no = new Random();

    int att = 0;
    ans = no.nextInt(max) + 1;
    ArrayList<Integer> list = new ArrayList<>();

    while (true){
        System.out.println("Enter a number between 1 to 10");
        guess = jai.nextInt();
        if(!list.contains(guess)){
        att += 1;
        list.add(guess);
        }
        if (guess == ans){
            System.out.println("You are correct, the answer is :"+ ans);
            System.out.println(att +" attempts to find the correct number!");
            System.exit(0);
        }else if (guess > ans){
            System.out.println("Too Large");
        }else if (guess < ans){
            System.out.println("Too Small");  
        }
    }
}
0 голосов
/ 19 марта 2020

Вам необходимо запомнить последний введенный номер и, если он совпадает с новым номером, введенным пользователем, не увеличивайте счетчик числа попыток. Как то так:

int prevGuess = 0;

while (true){
    System.out.println("Enter a number between 1 to 10");
    guess = jai.nextInt();
    if (prevGuess > 0 && prevGuess == guess) {
      System.out.println("You just tried that number!");
      continue;
    }
    prevGuess = guess;
    att += 1;
    att;
...