我做了一个 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