我无法看到我的Java代码有什么问题?

时间:2014-11-07 00:17:56

标签: java

我正在制作一个程序,将所有数据从一个数组放入另一个数组,向后。

所以,如果

String[] originalArray = {"you", "see", "I"};

然后它应该将它转移到这样的新数组中:

String[] newArray = new String[3];

newArray = "I", "see", "you"

这是我的代码。

public class ReverseArray {
public static void reverse() {
    String[] originalArray = {"cool", "really", "are", "You"};
    String[] newArray = {"", "", "", ""};

    for(int b = 0; b < newArray.length; b++) {
        for(int a = 3; a < -1; a--) {
            newArray[b] = originalArray[a];
        }
    }

    for(int c = 0; c < newArray.length; c++) {
        System.out.print(newArray[c] + "+");
    }

   }
}

我不确定是什么问题。当我尝试将其打印出来时,它只打印出(+ + + +)

我尝试过改变

String[] newArray = {"", "", "", ""};

String[] newArray = new String[4];

但它只是输出为

null

任何帮助?

4 个答案:

答案 0 :(得分:3)

你的问题在你的内心循环中......

for (int a = 3; a < -1; a--) {

大声读出来......

  • a等于3
  • 虽然a小于-1a--

查看它落在何处,for-loop只会在a-1时运行,但您已将其初始化为3

你实际上可以通过一个循环逃脱,例如......

String[] newArray = new String[originalArray.length];

for (int index = 0; index < newArray.length; index++) {
    newArray[index] = originalArray[originalArray.length - index - 1];
}

基本上这会对两个数组使用index值,但调整originalArray使其从末尾而不是从开头移动,作为一种可能的解决方案;)

答案 1 :(得分:1)

使用Collections.reverse()的另一种方式:

List<String> list = Arrays.asList("cool", "really", "are", "You");
System.out.println(list);
Collections.reverse(list);
System.out.println(list);

输出:

[cool, really, are, You]

[You, are, really, cool]

答案 2 :(得分:0)

好的,步骤如下:

您有一个大小为A的数组X。您希望将这些元素放在大小为B的数组X中。基本上你想要的是A[0](第一个元素)中的元素位于B的最后位置,即B[2]。为此,您需要计算“反向”索引。

首先,你循环遍历你的数组:

for(int index = 0; index < A.length;index++)
{
    String thisElement = A[index];
}

接下来,你想把它放在最后一个位置的另一个数组中,对吧?那么你需要取这个数组的长度,减去当前的索引。

for(int index = 0; index < A.length;index++)
{
    String thisElement = A[index];
    // The other index
    int otherIndex = (B.length - 1) - index; // We do -1 because we have zero-indexing.
    B[otherIndex] = thisElement;
}

现在应该以相反的顺序包含所有元素。

你做错了一些事

我尝试过更改

String[] newArray = {"", "", "", ""};

String[] newArray = new String[4];

这些东西基本相同。后者告诉编译器“给我4个字符串的空间”。在前者你给它4个字符串,它为他们腾出空间。所以这不是真正的必要,而是正确的。

    for(int b = 0; b < newArray.length; b++) {
        for(int a = 3; a < -1; a--) {
            newArray[b] = originalArray[a];
        }
    }

这段代码也是错误的。你在外循环中遍历数组。对于每个元素,您尝试再次循环。这也不需要。即便如此,你的循环从3变为2 ......但条件是“只要a小于-1”。它不小于-1,所以这个循环永远不会执行。

答案 3 :(得分:0)

您的代码存在很大问题:

for(int b = 0; b < newArray.length; b++) {
        for(int a = 3; a < -1; a--) {
            newArray[b] = originalArray[a];
        }
}

使用&#34; a&lt; -1&#34;你可能想要&#34; a&gt; -1&#34;否则内循环不会启动。但最重要的是,你有两个嵌套循环(两个for循环)没有意义,你只需要一个循环两个反向数组,你甚至不需要新的数组来放置结果:< / p>

for (i = 0; i < originalArray.length / 2; i++) {
  int temp = originalArray[i];
  originalArray[i] = originalArray[originalArray.length - 1 - i];
  originalArray[originalArray.length - 1 - i] = temp;
}

此for循环从数组的两侧向内替换位置。

当您达到代码掌握(或者不需要提供自己的算法)时,您只需使用:

Collections.reverse()

:)