Выбор символов вектора и случайное размещение их в матрице

#java #arrays #random

Вопрос:

У меня есть строка[50], содержащая 50 символов, эти символы необходимо поместить в строку[10][10] с использованием (int)(Math.random() * 3), чтобы цикл проходил через всю матрицу, помещая символы в последнюю позицию все, что получает math.random. Эти вопросы, которые задают учителя, ограничивающие способ, которым вы можете на них ответить, сводят меня с ума.

     public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    System.out.println("Type a phrase.");
    String phrase = entrada.nextLine();
    while (frase.length() > 50) {
        System.out.println("The phrase has to be less than 50 characters. Try again.");
        phrase = entrada.nextLine();
    }
    int carac = phrase.length();
    String[] vector = new String[carac];
    for (int i = 0; i < carac; i  ) {
        vector[i] = String.valueOf(phrase.charAt(i));
        System.out.print(vet[i]);
    }
    int position = 0;
    String[][] matrix = new String[10][10];
    for (int i = 0; i < 10; i  ) {
        for (int j = 0; j < 10; j  ) {
            position = (int) (Math.random() * 3);
            matrix[i][j] = vet[i] //this part doesn't make any sense, I'm stuck here.
        }
    }
}
 

Пример желаемого результата:

введите описание изображения здесь

Комментарии:

1. Вот как я это понимаю. Вам нужно сохранить текущее общее число lastPos текущее случайное число и поместить персонажа в lastPos. Но это означает, что вам нужно вычислить строку и столбец для lastPos. Если lastPos = 48, то строка = 48/10 = 4 и c = 48 = 8. Кроме того, то, как вы это описали, означает, что вы можете перезаписать некоторые символы, только что сгенерированное случайное число равно 0.

2. Возможно, вы захотите обсудить это со своим учителем, чтобы получить некоторые разъяснения относительно того, что ожидается, основываясь на комментариях в этом посте.

Ответ №1:

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

Таким образом, шаг может быть вычислен «случайным образом» (сначала от 0 до 2, затем от 1 до 3), а позиция в матрице может быть пересчитана с помощью операций деления / и по модулю %

Кроме того, при такой реализации массив vet кажется избыточным и vet[i] может быть заменен на String.valueOf(phrase.charAt(i)) :

 int position = 0;
for (int i = 0; i < carac; i  ) {
    int row = position / matrix.length;
    int col = position % matrix[row].length;
    matrix[row][col] = vet[i]; // or just String.valueOf(phrase.charAt(i))
    position  = (int)(Math.random() * 3)   1; // shift by 1 position is needed here!
}
 

Тогда матрицу можно было бы распечатать:

 for (int i = 0; i < matrix.length; i  ) {
    System.out.print(i   ": ");
    for (int j = 0; j < matrix[i].length; j  ) {
        System.out.print((matrix[i][j] == null ? " " : matrix[i][j]));
    }
    System.out.println();
}
 

Вывод выборки (со сдвигом):

 0:  TE  S T  
1: I  N G  S 
2:  E NT  EN 
3: C E       
4:           
5:           
6:           
7:           
8:           
9:           
 

Обновление вывода образца (без сдвига):

 0: TSTI G EN 
1: T NC E    
2:           
3:           
4:           
5:           
6:           
7:           
8:           
9:           
 

Очевидно, что без минимального сдвига 1 многие символы из phrase будут перезаписаны при вводе в матрицу и position = 0 .

Комментарии:

1. Зачем ты это делаешь? position = 1 random.nextInt(3); Это не то, что сказал ОП, чтобы сделать. Просто добавьте random number*3 , и вы должны придерживаться Math.random() этого, так как это то, что использовала операция, и это явно задание.

2. (int)(Math.random() * 3) может вернуть 0, и, следовательно, позиция не будет сдвинута.

3. Точно. И оперативная группа не просила этого делать. Таким образом, может произойти перезапись существующей позиции. Вот прямая цитата последней позиции все, что получает math.random. Не хватало многих деталей.

4. @Wanderer, в исходном коде есть несколько проблем , связанных с неправильными именами переменных: 1) while (frase.length() > 50) — должно быть phrase , frase объявлено нет; 2) то же самое с vet vector объявлено, vet отсутствует. Кроме того, ожидаемый результат четко демонстрирует, что всегда существует минимальный сдвиг в 1.

5. Кроме того, пример изображения показывает, что разница между двумя символами может составлять 3 T--E , как в тестировании слов и ПРЕДЛОЖЕНИИ, и даже 4, как в S---E — это невозможно (int)(Math.random()*3) , так как обеспечивает случайные значения в замкнутом диапазоне [0..2]