Угадайте число

 
 
 
Сообщения:70
Программа должна считать количество попыток, которое потребовалось пользователю, чтобы угадать число. И в конце сообщать, сколько было попыток, также должна подсказывать пользователю, что он ошибся в знаке, если программа загадала положительное число, а пользователь ввёл отрицательное. И наоборот.
Программа должна загадывать целое число из отрезка от [−10;10], исключая ноль. При этом, постараться, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое подходящее число, например, на 1, ведь тогда 1 буде выпадать с вдвое большей вероятностью, чем остальные числа).

import java.util.Scanner;
import java.lang.Math;
public class Main {
    public static void main(String[] args) {
       
        double prog, user;
        prog = Math.floor(Math.random() * (10 - 10) + 10);
        System.out.println("Я загадала число от -10 до 10, отгадайте его.");
        do {
            System.out.print("Вводите ваше число: ");
         
            Scanner input = new Scanner(System.in);
         
            user = input.nextDouble();
            if(user == prog) {
                System.out.println("Вы угадали!");
            } else {
             
                if ( user == Math.floor(user) && user > -10 && user < 10) {
                    System.out.print("Вы не угадали! ");
                 
                    if( prog < user ) {
                        System.out.println("Моё число меньше.");
                    } else {
                        System.out.println("Моё число больше.");
                    }
                } else {
                    System.out.println("Вы ввели не подходящее число!");
                }
            }
        } while( user != prog );
        System.out.println("До свиданья!");
    }
}
 
 
Сообщения:45
prog = Math.floor(Math.random() * (10 - 10) + 10);

prog всегда будет равен 10, т.к. (10-10) у нас будет 0 при любом значении Math.random().
 
 
Сообщения:70
Подскажите как дописать код к программе? По заданию в верху?
 
 
Сообщения:70
Подскажите что не правильно в цикле который подсчитает количество попыток и выводит их результат на экран в веденных пользователем,не могу понять что не правильно?
Выводит не тот результат который нужно.

import java.util.Scanner;
import java.lang.Math;
public class Main {
    public static void main(String[] args) {
 
        double prog, user;
 
        prog = Math.floor(Math.random() * 20 - 10);
        System.out.println("Я загадала число от -10 до 10, отгадайте его.");
 
 
        do {
 
            System.out.print("Вводите ваше число: ");
 
            Scanner input = new Scanner(System.in);
 
            user = input.nextDouble();
            
           {
               for(int count = 0;count < user;count++){
 
               if(user == prog) {
                System.out.println("Вы угадали!");
            } else {
 
                if ( user == Math.floor(user) && user > -10 && user < 10) {
                    System.out.print("Вы не угадали! ");
 
                    if( prog < user ) {
                        System.out.println("Моё число меньше.");
                    } else {
                        System.out.println("Моё число больше.");
                    }
                } else {
                    System.out.println("Вы ввели не подходящее число!");
                 }
               }
 
              System.out.println("Количество попыток " + count);  }
           }
        } while( user != prog );
         System.out.println("До свиданья!");
 
        }
}


цикл
for(int count = 0;count < user;count++)


Как можно его исправить?[/code]
 
 
Сообщения:45
int count = 0;
for(count = 0;count < user;count++)
и т.д.
Надо вынести count из цикла.
 
 
Сообщения:70
Спасибо за ответ "fjfalcon"

Подскажите "fjfalcon" как теперь сделать в коде , чтоб например я ввожу отрицательное число, а программа загадала положительное число и вы водило об этом ошибку что я ввел не правильное число как бы выдавала подсказку какое число нужно вводить.
 
 
Сообщения:45
Не хочется искать методов...
После получения рандомного числа.
private int result; // 1 > 0; 0 < 0;
if ( prog > 0 ) result = 1;
else result = 0;

А это уже в цикле.
int userchoise; 
if ( user > 0 ) userchoise = 1; else userchoise = 0;
if (userchoise != result ) 
{
System.out.println("Вы ввели неверный знак");
}
 
 
Сообщения:70
Спасибо за ответ "fjfalcon"
 
 
Сообщения:26
/*Программа должна загадывать число из диапазона от [−10  - + 10], исключая ноль. 
При этом, постарайтесь, чтобы распределение случайных чисел генерируемых 
программой было равномерных (т. е. в случае выпадения нуля его нельзя 
просто заменить на какое-то другое число, например, на 1, ведь
тогда 1 будет выпадать с вдвое большей вероятностью, чем остальные числа).
 */
import java.util.Scanner;

public class RandomIntRangeV3
{
    public static void main(String[] args)
    {
        int i = 0;// количество попыток

        // prog — число созданное программой
        // user — число введённое пользователем
        int prog, user;
        // Генерируем случайное целое число от 1 до 10
        //Math.random() - выдает случайное число в диапазоне от 0.0 до 1.0 типа double
        do
        {
            prog = (int)(Math.random() * 21) - 10; // получаем диапазон от -10 до +10
            System.out.print("\nprog: " + prog);
        }
        while (prog == 0);

          /*
          так как метод Math.random() - выдает число типа double, а согласно условию работаем с
          целыми числами, поэтому производим явное преобразование из типа double в тип int
        */

        System.out.println("\nВыбрано число от 1 до 10, отгадайте его.");
        System.out.print("Введите ваше число: ");
        // создаем переменную содержащую ссыслку на объект класса Scanner
        Scanner input = new Scanner(System.in);
        // Проверяем, есть ли в потоке ввода целое число, используем метод hasNextInt()
        if( input.hasNextInt() )
        {
            do { //запускаем выполнение команды переде проверкой условия цикла while
                // Читаем с потока ввода целое число
                user = input.nextInt();
                if(user == prog) { //сравниваем введенное число с заданным программой
                    System.out.println("Вы угадали!");
                } else { // если введенное число не совпадает с заданным
                    // Проверяем, входит ли число в диапазон [1-10]
                    if (user >= -10 && user <= 10) // если число входит в заданный диапазон
                    { //выполняем блок команд
                        System.out.print("Вы не угадали! ");
                        // Если число загаданное программой меньше...
                        if( prog < user ) //проверяем , меньше или больше введенное число в отличии от заданного
                        {
                            System.out.println("Ваше число больше.");
                        } else {
                            System.out.println("Ваше число меньше.");
                        }
                    }
                    else //если введенное число не входит в заданный диапазон
                    {
                        System.out.println("Ваше число вообще не из нужного отрезка!");
                    }
                }
                i++; //счетчик кол-ва попыток
            }
            while( user != prog );
            /*цикл do-while выполняется до тех пор пока значения введенного и заданного числа
            не равны*/

            System.out.println("Вы угадали с " + i + " попытки");
        }
        else // эта часть кнострукции if-else, сработает, если пользователь не ввел целое число
        {
            System.out.println("Ошибка. Вы не ввели целое число!");
        }
        System.out.println("До свиданья!");
    }
}
 
 
Сообщения:535
turtles:
prog = Math.floor(Math.random() * 20 - 10);

не совсем верно, так-как может выдать 0.
prog = (int)(Math.random() * 10 + 1) * (Math.random() > 0.5 ? 1 : -1 );
 
 
Сообщения:26
windruf:
не совсем верно, так-как может выдать 0.


Пусть выдает, ведь там цикл для этого и есть, это согласно условию, не нужно писать код так, чтобы 0 совсем не выпадал,
пусть он и выпадает, только 0 не должен участвовать в расчетах и при выпадении нуля программа не должна останавливаться

(т. е. в случае выпадения нуля его нельзя 


И задача эта - для новичков, а если в своем примере используете тернарный оператор,
то оставляйте, пожалуйста подробный комментарий вашего кода
Изменен:08 дек 2017 13:41
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет