簡體   English   中英

根據問題隨機化用戶輸入

[英]Randomize user input based on questions

我試圖從用戶那里收集一些數據並與用戶輸入一起顯示。 我給的例子是:

Filename: output.txt
number of lines: 4
Line Length: 8
Character Set: ABC123

2CB3A32C
BB13CAA3
C3A21CB2
CC2B13A3

我目前已獲得用戶輸入,但我不知道如何根據輸入顯示隨機字母和數字。 這是我的代碼。 任何幫助都會很大。 數據必須使用循環顯示。

public static void main(String[] args) throws IOException
{
    int lineNum = 0;
    int numChars = 0;
    String charSet = "";
    String userInput = "";
    String filename;

    //Creates a Scanner Object for keyboard input.
    Scanner keyboard = new Scanner(System.in);

    //Get the filename.
    System.out.print("Enter a filename: ");
    filename = keyboard.nextLine();

    System.out.print("Enter number of lines: ");
    lineNum = keyboard.nextInt();

    if( lineNum < 1 || lineNum > 20){
        lineNum = 20;
        System.out.println("Defaulting to 20 lines");
    }

    System.out.print("Enter number of characters in each line: ");
    numChars = keyboard.nextInt();
    keyboard.nextLine();

    if( numChars < 1 || numChars > 20){
        numChars = 20;
        System.out.println("Defaulting to 20 characters");
    }

    System.out.print("Enter character set: ");
    charSet = keyboard.nextLine();

    //Put all the input together to display the results 

    PrintWriter pw = new PrintWriter(filename);
    pw.println("\nFilename: " + filename);
    pw.println("Number of lines: " + lineNum );
    pw.println("Line Length: " + numChars );
    pw.println("Character set: " + charSet );
    pw.println("\n" + userInput );
    pw.close();

    // Read the file
    BufferedReader br = new BufferedReader(new FileReader(filename));
    for (String line; (line = br.readLine()) != null;) {
        System.out.println(line);
    }

}

嘗試這個。

Random random = new Random();
for (int i = 0; i < lineNum; ++i) {
    for (int j = 0; j < numChars; ++j)
        pw.print(charSet.charAt(random.nextInt(charSet.length())));
    pw.println();
}

看看: RandomStringUtils

這可能有助於您走上正確的軌道: import org.apache.commons.lang.RandomStringUtils; System.out.println(RandomStringUtils.random(8,new char[]{'a','b','c','1', '2', '3'})); import org.apache.commons.lang.RandomStringUtils; System.out.println(RandomStringUtils.random(8,new char[]{'a','b','c','1', '2', '3'}));

嘗試:

str.charAt(ThreadLocalRandom.current().nextInt(0, str.length()));

在Java8中

final int length = 8;
final Random rand = new Random();
String random = IntStream.range(0, length).mapToObj(i -> str.charAt(rand.nextInt(100) % str.length()) + "").collect(Collectors.joining());
System.out.println(random);

為10次運行生成隨機字符串

A31CCCB3
1AC3A2CA
BAB11B2A
A33A1ACA
BCCCB2AC
331C12CA
3CC1AAB3
113BAABB
1BC22B1A
31BBCAC1

您可以使用以下實用程序類

import java.util.Random;

public class RandomString {

  private char[] symbols;

  private final Random random = new Random();

  private final char[] buf;

  public RandomString(int length ,char[] symbols) {
    if (length < 1)
      throw new IllegalArgumentException("length < 1: " + length);
    buf = new char[length];
    this.symbols = symbols;
  }

  public String nextString() {
    for (int idx = 0; idx < buf.length; ++idx) 
      buf[idx] = symbols[random.nextInt(symbols.length)];
    return new String(buf);
  }
}

要從主使用它,

RandomString randString = new RandomString(numChars ,charSet.toCharArray());
        for (int i = 0; i < lineNum; i++) {
            System.out.println("" +randString.nextString());
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM