我正在编写一个程序,该程序接受用户输入的长度必须为6的字符串,并创建该字符串的随机版本。然后,它打印出5-10次随机字符串的迭代。例如:
输入8和abcdef将创建8行abcdef的随机变化。下面的程序可以做到这一点,但是它是将字符串添加在一起的,如下所示:
abbdfe abbdfeacbfed 等等。有谁知道如何更改它,以便它将打印abbdfe acbfed等。
我知道我的代码存在一些功能上的问题,但是它起初是一个
package matrixMaker;
import java.util.Scanner;
import java.util.Random;
public class matrixMaker
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Please enter a number between 5 and 10, inclusively: ");
int userInput = in.nextInt();
in.nextLine();
System.out.print("Please enter a string of length 6 characters: ");
String textToChange = in.nextLine();
String randomText = "";
int length = 6;
// Print error if text is not 6 characters long.
while(textToChange.length() != 6)
{
System.out.println("Error! Enter a string of length 6.");
}
// If input is 6 characters, print out randomText X amount of times, depending on the user's specification of user.
if(textToChange.length() == 6)
{
for (int i = 1; i <= userInput; i++)
{
// Initialise array to create random order of chars.
Random rand = new Random();
char[] text = new char[length];
for(int a = 0; a < length; a++)
{
text[a] = textToChange.charAt(rand.nextInt(textToChange.length()));
}
// Take the chars from array and concatenate them into a string of the same size as the text variable.
for(int a = 0; a < text.length; a++)
{
randomText += text[a];
}
System.out.printf(randomText + "\n");
}
}
in.close();
}
}
答案 0 :(得分:0)
您似乎在方法顶部初始化了变量randomText,但是继续在循环内添加到同一变量,因此它将继续添加到自身。
world
或者在循环内初始化randomText字符串,或者在循环内的最后一行之后,再次将其分配回空字符串。
顺便说一句,您似乎在这里还有另一个错误:
String randomText = "";
randomText += text[a];
此循环将无限循环,您需要添加一种方法,以允许用户在显示错误后更改输入。
// Print error if text is not 6 characters long.
while(textToChange.length() != 6)
{
System.out.println("Error! Enter a string of length 6.");
}
-编辑添加到OP注释: 在奇数行号上打印奇数生成的文本的字符;一种方法是考虑将生成的randomText推到在循环外部初始化的空ArrayList中。然后,您可以单独循环遍历ArrayList。您可以考虑重构此方法的方式,并以自己喜欢的方式放入外部方法。像这样:
while(textToChange.length() != 6)
{
System.out.println("Error! Enter a string of length 6.");
in.nextLine();
textToChange = in.nextLine();
}