【问题标题】:randomly replace random numbers of char in a string随机替换字符串中的随机字符数
【发布时间】:2017-05-20 14:11:24
【问题描述】:

我是 Java 新手,我的代码需要一些帮助。

import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;
public class asdf {
    public static void main(String[] args)
    {
        Random generator = new Random();
        int num1;
        String theWord;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string to rearrange");
        theWord = in.nextLine();
        int length = theWord.length();
        Random times=new Random();
        System.out.println("Length of String:"+length);
        char[] chars=theWord.toCharArray();
        Arrays.sort(chars);
        int timez=times.nextInt();
        num1=generator.nextInt(length);
        char c=theWord.charAt(num1);
        String newWord=new String(chars);
        for(int i=0;i+=1;i<timez)
        {
            newWord=newWord.replace(c, '*');
        }
        System.out.println(newWord);
     }
}

所以我试图重新排列字符串并用'*'替换一些字符,但它不起作用,我不知道如何修复它。

【问题讨论】:

  • 首先你需要在你的for循环中交换i+=1i&lt;timez
  • for(int i=0;i+=1;i
  • 检查for 循环。它应该类似于:for(int i=0;i&lt;timez;i++)
  • 我改变了它们,现在它可以工作但通常需要大约 20 秒才能处理,是否有可能解决这个问题?

标签: java random replace


【解决方案1】:
import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;
public class asdf {
public static void main(String[] args) {
    Random generator = new Random();
    int num1;
    String theWord;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a string to rearrange");
    theWord = in.nextLine();
    int length = theWord.length();
    Random times=new Random();
    System.out.println("Length of String:"+length);
    char[] chars=theWord.toCharArray();
    Arrays.sort(chars);
    int timez=times.nextInt();
    num1=generator.nextInt(length);
    char c=theWord.charAt(num1);
    String newWord=new String(chars);
    for(int i=0;i<timez;i++) {
        newWord=newWord.replace(c, '*');
    }
    System.out.println(newWord);
    }
 }

Ideone 示例:http://ideone.com/PjfAor

【讨论】:

    【解决方案2】:

    问题在于for 循环。您应该按如下方式更改循环:

    for (int i = 0; i < timez; i++)
    

    如果您有兴趣,这里有另一种更简洁的方式来实现您想要实现的目标:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] input = in.nextLine().toCharArray();
    
        Random rand = new Random();
        for (int k = 0; k < 5; k++) {
            int leftIndex = rand.nextInt(input.length - 1);
            int rightIndex = rand.nextInt(input.length - 1);
    
            if (leftIndex == rightIndex)
                continue;
    
            char buffer = input[leftIndex];
            input[leftIndex] = input[rightIndex];
            input[rightIndex] = buffer;
        }
    
        System.out.println(input);
        in.close();
    }
    

    输入:

    mango
    

    输出:

    ngamo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2017-08-06
      • 2017-10-22
      • 2021-05-29
      相关资源
      最近更新 更多