ImAMathMajor Ответов: 1

Как написать код, который случайным образом помещает букву " О " на основе сравнения введенного пользователем числа и случайно сгенерированного числа?


Мне нужно написать программу, которая создает иллюзию того, что мяч "O" подпрыгивает взад и вперед по консоли, но затем просит пользователя ввести вероятность между (0,0 и 1,0) того, что мяч движется вправо, а не влево. Для каждой итерации используйте класс Random, чтобы выбрать число от 0,0 до 1,0, и если это число больше, чем выбор пользователя, переместитесь влево, в противном случае - вправо. Если мяч не может двигаться в этом направлении (потому что он находится на краю), тогда «О» назад к центру на одну клетку. У меня есть код, в котором он создает иллюзию подпрыгивания мяча "О", но не могу заставить его выполнить вторую часть. Как я могу сравнить сгенерированное число и вероятность, введенную пользователем, и сделать шаг «O» на основе сравнения? Это то, что у меня есть ...


import java.util.Scanner;
import java.util.Random;

public class HelpForMidterm1 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		Random rand = new Random();
		int spaces;
		System.out.print("How many spaces wide should the ball bounce in? ");
		spaces = scan.nextInt();
		double probability;
		System.out.print("Pick a probability for the ball to move right? ");
		probability = scan.nextDouble();
		double number;
		number = rand.nextDouble();
				while (true){
		for (int row = 0; row < spaces; row++) 
			{
				for (int col = 0; col <= row; col++) 
				{
					if (row == col)
						System.out.print("O");
					if (rand.nextDouble() > probability)
						
					else  
						System.out.print(" ");
					
				}
				System.out.println();
			}
		
		for (int row = spaces; row >= 0; row--)
			{
				for (int col = 0; col <= row; col++)
				{
					
					if (row == col)
						System.out.print("O");
					else
						System.out.print(" ");
				}
				System.out.println();
			}
		System.out.println();
		
		
		
		
		
		
        }
	
	}


Что я уже пробовал:

Я пытался использовать как bounceLeft и bounceRight, а также оператор if, который включен, но не завершен if (rand. nextDouble() > probability), тогда я застрял.

1 Ответов

Рейтинг:
2

CPallini

Ваши шары "двигаются" заранее определенным образом. Таким образом, трудно модифицировать код для имитации инверсии скорости.
Вы могли бы сохранить "текущую скорость x", а также текущую "текущую позицию x" в двух переменных, скажем xspeed, xpos, затем, на каждом row итерация, вы обновляете xpos основанный на xspeed (xspeed это либо 1 или -1), а затем обновить xspeed (на основе сгенерированного случайного числа) и, наконец, нарисуйте шар, если col == xpos.
Что-то вроде

for (int row = 0; row < spaces; row++) 
{
  xpos += xspeed;
  if (xspeed == 1 && rand.nextDouble() > probability)
    xspeed = -1;
   for (int col = 0; col <= row; col++) 
   {
     if (xpos == col)
        System.out.print("O");
     else 
        System.out.print(" ");
   }
}


Конечно, вы должны явно обращаться (слева в качестве упражнения) с угловым случаем xpos становится отрицательным или больше, чем spaces.