【问题标题】:How can I get my outputs to print on the same line without repeats?如何让我的输出打印在同一行而不重复?
【发布时间】:2023-03-07 07:55:02
【问题描述】:

这是我的代码。它是上课用的,应该通过随机替换“dbqp”来模拟“阅读障碍”。

import java.util.Scanner;

public class Dyslexia
{
  public static void main(String[] args)
  {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter a String");
    String str = scanner.nextLine();
    String output = "";
    
    String e = null;
    
    for (int i = 0; i < str.length(); i++)
    {
      int randomInt = (int)(Math.random() * 4) + 1; 
      System.out.println(randomInt);
      
      if (randomInt == 1)
      {
        e = "d";
      }
      if (randomInt == 2)
      {
        e = "b";
      }
      if (randomInt == 3)
      {
        e = "q";
      }
      if (randomInt == 4)
      {
        e = "p";
      }
      output = str.replaceAll("[dbqp]", e);
      System.out.println(output); 
    }
  }
}   

我目前得到的输出(假设我输入了 qpdb)是:

1
dddd
3
qqqq
3
qqqq
3
qqqq

忽略调试的数字,但考虑到这些随机数,我的目标是:

1
d
3
q
3
q
3
q

【问题讨论】:

  • 您能否提供示例预期的输入和输出,这可能有助于我们更好地理解您的问题?当你说“我希望程序在那种情况下打印出“dqqq”。你指的是哪个实例?

标签: java string loops for-loop random


【解决方案1】:

您正在执行replaceAll 调用,这会将它们全部设置为相同的值。如果您希望单独考虑每个字符,则需要为每个字符随机评估和选择,然后用它重建一个新的字符串。

import java.util.List;
import java.util.Random;

public class DyslexiaExample
{
  public static void main(String[] args) {
    System.out.println(simulateDyslexia("Some possible bountiful quotes."));
  }
  
  public static String simulateDyslexia(String sentence) {
    List<Character> vals = List.of('d', 'b', 'q', 'p');
    StringBuilder builder = new StringBuilder();
    
    Random random = new Random();
    
    for(char c : sentence.toCharArray()) {
      if(vals.contains(c)) {
        builder.append(vals.get(random.nextInt(vals.size())));
      }
      else {
        builder.append(c);
      }
    }
    
    return builder.toString();
  }
}

示例输出: Some bossible dountiful buotes.

如果您希望在哪个字母与另一个字母交换之间保持一致,请考虑生成一个Map。

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DyslexiaExample
{
  public static void main(String[] args) {
    System.out.println(simulateDyslexia("And quite possibly even more boisterous bountiful quotes."));
  }
  
  public static String simulateDyslexia(String sentence) {
    List<Character> vals = List.of('d', 'b', 'q', 'p');
    StringBuilder builder = new StringBuilder();
    
    List<Character> shuffleVals = new ArrayList<>(vals);
    Collections.shuffle(shuffleVals);
    
    Map<Character, Character> swapMap = new HashMap<>();
    for(int i = 0; i < vals.size(); i++)
      swapMap.put(vals.get(i), shuffleVals.get(i));
    
    for(char c : sentence.toCharArray()) {
      if(swapMap.keySet().contains(c)) {
        builder.append(swapMap.get(c));
      }
      else {
        builder.append(c);
      }
    }
    
    return builder.toString();
  }
}

示例输出: Anb puite dossiqly even more qoisterous qountiful puotes.

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2020-10-23
    • 2020-02-27
    相关资源
    最近更新 更多