Выбор и замена случайно сгенерированных букв в Java - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь выбрать позицию в моих случайно сгенерированных 10 буквах, а затем изменить эту случайно выбранную букву, чтобы изменить на другую букву в алфавите. Я догадываюсь о том, как я должен выбрать и изменить это письмо. Я думаю, что моя программа выбирает место, но я не могу узнать, как продолжить его. Вы также можете игнорировать часть userinput, я планирую использовать ее позже.

Вот моя программа

package Stuff;

import java.util.Scanner;

import java.util.Random;

public class Stuff {

    static Scanner userinput = new Scanner(System.in);

    public static void main(String[] args) {

        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        int N = alphabet.length(), rndposition = (int) (Math.random() * 10 + 1), rndletter = alphabet.charAt(1);

        Random r = new Random();

        for (int i = 0; i < 10; i++) {
            System.out.print(alphabet.charAt(r.nextInt(alphabet.length())));
        }
        System.out.println(r);
    }
}

Мой вывод - 10 случайных цифр плюс "java .util.Random448139f0

Спасибо за любую помощь или рекомендации

Я также новичок в этом, поэтому я мог сделать что-то не так.

Редактировать:

Вот моя новая программа

public static void main(String[] args) {

    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    int randomnumber = 0;
    int rndposition = (int) (Math.random() * 10 + 1);
    int rndletter = alphabet.charAt(1);

    Random r = new Random();

    for (int i = 0; i < 10; i++) {
        randomnumber = r.nextInt(alphabet.length());
        System.out.print(alphabet.charAt(randomnumber));
        alphabet.replace(rndposition, rndposition + 1, rndletter);
    }
    System.out.println("\n");
}

Единственная проблема, с которой я, похоже, сейчас сталкиваюсь, - это "alphabet.replace", где он не позволяет использовать аргумент, поскольку он не применим для ( int, int, int). Затем мне нужно перепечатать случайное слово из 10 символов, а затем повторить его 20 раз.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы печатаете "java .util. Random@6f94fa3e" в одной строке с вашими 10-ю случайными буквами, потому что метод print в вашем для l oop отобразит текущую строку, но не прекратит работу Это. Метод println, с другой стороны, будет печатать на текущей строке и завершать ее, что означает, что ваш следующий отображаемый текст будет находиться на новой строке. Например:

System.out.print("This is ");
System.out.println("the same line.");
System.out.println("This is a new line.");
// Output:
// This is the same line.
// This is a new line.

Вы можете улучшить его, вставив символ новой строки в конце:

System.out.println("\n" + r);

Если вы не уверены, почему вы получаете "java .util .Random448139f0 "напечатан в первую очередь. Вы пытаетесь напечатать объект, для которого не реализован метод .toString (). Чтобы напечатать число, сгенерированное с использованием этого объекта, вы можете поместить его в переменную и распечатать позже:

int randomNumber = 0;
for (int i = 0; i < 10; i++) {
    randomNumber = r.nextInt(alphabet.length());
    System.out.print(alphabet.charAt(randomNumber));
}
System.out.println("\n" + randomNumber);

Редактировать :

Некоторые Усовершенствования, которые могут быть полезны:

Рекомендуется объявлять переменные в новой строке, даже если они совместно используют один и тот же тип:

int N = alphabet.length();
int rndposition = (int) (Math.random() * 10 + 1);
int rndletter = alphabet.charAt(1);

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

Еще одно усовершенствование, которое приходит мне в голову, - это соглашение о верблюдах для именования переменных, которых нет в вашем коде. Вы можете обратиться к этой странице для получения дополнительной информации.

Я верю, что все остальное придет с практикой :) Наслаждайтесь своим приключением!

0 голосов
/ 29 февраля 2020

Возможно, вы ищете что-то вроде этого:

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random r = new Random();
        char oldChar, newChar;
        int len = alphabet.length();
        System.out.println(alphabet + " after replacing ");
        for (int i = 0; i < 10; i++) {
            oldChar = alphabet.charAt(r.nextInt(len));
            newChar = alphabet.charAt(r.nextInt(len));
            System.out.println(oldChar + " with " + newChar + ": " + alphabet.replace(oldChar, newChar));
        }
    }
}

Вывод:

ABCDEFGHIJKLMNOPQRSTUVWXYZ after replacing 
P with E: ABCDEFGHIJKLMNOEQRSTUVWXYZ
I with R: ABCDEFGHRJKLMNOPQRSTUVWXYZ
I with V: ABCDEFGHVJKLMNOPQRSTUVWXYZ
V with T: ABCDEFGHIJKLMNOPQRSTUTWXYZ
W with F: ABCDEFGHIJKLMNOPQRSTUVFXYZ
H with W: ABCDEFGWIJKLMNOPQRSTUVWXYZ
O with T: ABCDEFGHIJKLMNTPQRSTUVWXYZ
O with P: ABCDEFGHIJKLMNPPQRSTUVWXYZ
F with D: ABCDEDGHIJKLMNOPQRSTUVWXYZ
H with N: ABCDEFGNIJKLMNOPQRSTUVWXYZ

Не стесняйтесь комментировать в случае каких-либо сомнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...