我做了一个 for 循环来交换字符串中的两个 indiv char 变量
I made a for loop to swap two indiv char variables in a string
我应该写一个打乱单词的方法,在一个不是第一个或最后一个字符的单词中切换两个字母。
我已经将 i 和 j 初始化为位置 1 和 str.length() -1 之间的随机整数。这个循环不打印单词的乱序版本是有原因的吗?
char[] chararray = word.toCharArray();
int i = (int) (Math.random() * ((word.length()-2) - (1)) + 1);
int j = (int) (Math.random() * ((word.length()-2) - (1)) + 1);
for (int x = 0; x < word.length(); x++)
{
if (x == i)
{
chararray[x] = word.charAt(i);
}
else if (x == j)
{
chararray[x] = word.charAt(j);
}
}
word = new String (chararray);
System.out.println(word);
当我输入tofu
时,它会重印tofu
。我想输入 "tofu" 并让它输出 "tfou".
我想您会寻找以下内容
for (int x = 0; x < word.length(); x++)
{
if (x == i)
{
chararray[x] = word.charAt(j);
}
else if (x == j)
{
chararray[x] = word.charAt(i);
}
}
交换 if 和 else 块中的 i 和 j 值。
当 x 等于 i 时,您将在 chararray 中重新分配相同的值,因此您将获得相同的值。但你的意图是我希望交换 i 和 j 位置的字符。
还有一件事,确保 i 永远不会等于 j
从字符数组开始。
使用随机生成器获取0(含)到字符数组长度(不含)之间的2个整数。
如果i != j
,交换它们。 (没有必要将字符与其自身交换)
public class QuickTester {
public static void main(String[] args) {
Random rand = new Random();
char[] charArr = "elephant".toCharArray();
// Using charArr.length - 2 + 1 to exclude first and last
int i = rand.nextInt(charArr.length - 2) + 1;
int j = rand.nextInt(charArr.length - 2) + 1;
if (i != j) {
System.out.printf("Going to swap %c at position %d "
+ "with %c at position %d%n", charArr[i], i, charArr[j], j);
char temp = charArr[i];
charArr[i] = charArr[j];
charArr[j] = temp;
System.out.println("\nResult: " + new String(charArr));
}
}
}
结果:
Going to swap t at position 7 with e at position 2
Result: eltphane
更新:
从 charArr.length
更改为 charArr.length - 2 + 1
以排除第一个和最后一个字符。
你的逻辑好像不对,
if (x == i)
{
chararray[x] = word.charAt(i);
}
上面只是指向同一个索引,x和i指向同一个,你需要交换索引。
代码下方
public static void main(String args[]) {
String word = "ankur";
char[] chararray = word.toCharArray();
int i = (int) (Math.random() * ((word.length() - 2) - (1)) + 1);
int j = (int) (Math.random() * ((word.length() - 2) - (1)) + 1);
System.out.println(i + " and " + j);
for (int x = 0 ; x < word.length() ; x++) {
if (x == i) {
chararray[x] = word.charAt(j);
} else if (x == j) {
chararray[x] = word.charAt(i);
}
}
word = new String(chararray);
System.out.println(word);
}
输出
2 and 1
aknur
我应该写一个打乱单词的方法,在一个不是第一个或最后一个字符的单词中切换两个字母。
我已经将 i 和 j 初始化为位置 1 和 str.length() -1 之间的随机整数。这个循环不打印单词的乱序版本是有原因的吗?
char[] chararray = word.toCharArray();
int i = (int) (Math.random() * ((word.length()-2) - (1)) + 1);
int j = (int) (Math.random() * ((word.length()-2) - (1)) + 1);
for (int x = 0; x < word.length(); x++)
{
if (x == i)
{
chararray[x] = word.charAt(i);
}
else if (x == j)
{
chararray[x] = word.charAt(j);
}
}
word = new String (chararray);
System.out.println(word);
当我输入tofu
时,它会重印tofu
。我想输入 "tofu" 并让它输出 "tfou".
我想您会寻找以下内容
for (int x = 0; x < word.length(); x++)
{
if (x == i)
{
chararray[x] = word.charAt(j);
}
else if (x == j)
{
chararray[x] = word.charAt(i);
}
}
交换 if 和 else 块中的 i 和 j 值。
当 x 等于 i 时,您将在 chararray 中重新分配相同的值,因此您将获得相同的值。但你的意图是我希望交换 i 和 j 位置的字符。
还有一件事,确保 i 永远不会等于 j
从字符数组开始。
使用随机生成器获取0(含)到字符数组长度(不含)之间的2个整数。
如果i != j
,交换它们。 (没有必要将字符与其自身交换)
public class QuickTester {
public static void main(String[] args) {
Random rand = new Random();
char[] charArr = "elephant".toCharArray();
// Using charArr.length - 2 + 1 to exclude first and last
int i = rand.nextInt(charArr.length - 2) + 1;
int j = rand.nextInt(charArr.length - 2) + 1;
if (i != j) {
System.out.printf("Going to swap %c at position %d "
+ "with %c at position %d%n", charArr[i], i, charArr[j], j);
char temp = charArr[i];
charArr[i] = charArr[j];
charArr[j] = temp;
System.out.println("\nResult: " + new String(charArr));
}
}
}
结果:
Going to swap t at position 7 with e at position 2
Result: eltphane
更新:
从 charArr.length
更改为 charArr.length - 2 + 1
以排除第一个和最后一个字符。
你的逻辑好像不对,
if (x == i)
{
chararray[x] = word.charAt(i);
}
上面只是指向同一个索引,x和i指向同一个,你需要交换索引。
代码下方
public static void main(String args[]) {
String word = "ankur";
char[] chararray = word.toCharArray();
int i = (int) (Math.random() * ((word.length() - 2) - (1)) + 1);
int j = (int) (Math.random() * ((word.length() - 2) - (1)) + 1);
System.out.println(i + " and " + j);
for (int x = 0 ; x < word.length() ; x++) {
if (x == i) {
chararray[x] = word.charAt(j);
} else if (x == j) {
chararray[x] = word.charAt(i);
}
}
word = new String(chararray);
System.out.println(word);
}
输出
2 and 1
aknur