【问题标题】:About arrays and printing out the newly sorted array?关于数组并打印出新排序的数组?
【发布时间】:2014-03-26 04:23:28
【问题描述】:

这是我颠倒数组顺序的代码:

int array[x];
String temp;

String reversedOrder = "";

for (int i = 0; i < x/2; i++)
 {
 temp = array[i];
 array[i] = array[x-1 - i];
 array[x-1 - i] = temp;
 reversedOrder = reversedOrder + array[i];
 }
System.out.println(reversedOrder);

我的问题是如何打印出这个新排序的数组?我尝试声明一个字符串并将其放入 for 循环中,但它没有按我想要的方式打印:让我们说“Hello World 我在这里”我需要它打印出“olleHdlroWImaereh”,但它打印的所有内容都是前两个颠倒的单词“olleHdlroW”并在那里结束。

感谢任何帮助。谢谢。

*我正在尝试在自己的空闲时间编写这个程序。

*感谢大家帮助我完成我的程序。在添加了一个类似于 Elliot 的 for 循环后,它终于起作用了。 :p 干杯。

【问题讨论】:

  • 好的,我会试试的。泰
  • @EdwinDalorzo reverseOrder 是一个字符串(嗯,一次是 reversedOrder 然后是 reverseOrder)
  • 当你应该连接x时,你只连接数组的第一个x/2元素。
  • 我的逻辑正确吗? reversedOrder = reversedOrder + array[i] 部分呢?
  • qiu 我先尝试这样做,但它只是重复:“olleHdlroWIdlroWolleH”

标签: java arrays


【解决方案1】:

首先,最简单的方法是使用Arrays#toString()。其次,你的代码有一些问题,

int[] array = { 1, 2, 3 }; // <-- your array declaration isn't valid.
// String temp; // <-- A String is not an int.
int x = array.length; // <-- added to demonstrate

for (int i = 0; i < x / 2; i++) {
    // This is a swap with no temporary storage, also known as the
    // http://en.wikipedia.org/wiki/XOR_swap_algorithm
    array[i] ^= array[x - 1 - i];
    array[x - 1 - i] ^= array[i];
    array[i] ^= array[x - 1 - i];
}
System.out.println(Arrays.toString(array));

输出是

[3, 2, 1]

编辑

删除 Arrays.toString(),并用类似的东西替换它 -

StringBuilder sb = new StringBuilder();
for (int i : array) {
    sb.append(i);
}
System.out.println(sb.toString());

输出是

321

编辑 2

或者,你可以使用

for (int i : array) {
    System.out.print(i);
}
System.out.println();

也会输出

321

【讨论】:

  • 好的,但我不希望输出为 [3,2,1] 而是 321。有没有办法将数组放在一起?
  • 有没有办法不使用StringBuilder?再次感谢。
  • @Thankyouforyourhelp 查看我上面的编辑 2,但也可以。
  • 艾略特你太棒了。 :p 但是如果我想像字符串一样“返回”一个变量怎么办。在我的示例中,它将是“返回数组;”但是,如果我尝试将 system.out.println 与您的答案中的 for 循环一起使用,我认为这不适用于这种情况。你有什么推荐?抱歉有这些问题。我保证这将是最后一个。我只想解决这个问题,而不是创建另一个线程
  • 使用 StringBuilder。这就是它的用途。即使你做了“字符串算术”,JVM 也会把它变成一个 StringBuilder。
【解决方案2】:

您的反向逻辑看起来是正确的,但是当您仅遍历 charArray 的一半时,您正试图附加您的 reversedOrder 字符串。

您可以在 for 循环之后使用 String(char[]) 构造函数将整个反向 charArray 作为字符串。

@Test
public void reverse() {
  char[] charArray = "Hello World I am here".toCharArray();
  int x = charArray.length;

  for (int i = 0; i < x/2; i++) {
    char temp = charArray[i];
    charArray[i] = charArray[x-1 - i];
    charArray[x-1 - i] = temp;
  }

  String expected = "ereh ma I dlroW olleH";
  assertEquals(expected, new String(charArray));
}

【讨论】:

    【解决方案3】:

    使用Arrays 类打印用户友好的array 字符串

    Arrays.toString(array);
    

    试试这个:

        String[] array = new String[] { "Hello", "World", "I", "am", "here" };
    
        String[] newArray = new String[array.length];
    
        for (int i = 0; i < array.length; i++) {
            newArray[array.length - 1 - i] = new StringBuilder(array[i]).reverse().toString();
        }
    
        System.out.println(Arrays.toString(newArray));
    

    --编辑--

    使用这个以字符串格式打印出array,不带任何逗号和括号

        String str = Arrays.toString(array).replaceAll(", ", "");
        System.out.println(str.substring(1, str.length() - 1));
    

    【讨论】:

    • 啊我刚看到你的编辑。我将与所有其他答案一起尝试
    • 我已经更新了我的帖子,以字符串格式打印出不带任何逗号和括号的数组。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多