在 Java 中反转数组哪里出错了?
Where did I go wrong in reversing an array in Java?
我的代码:
public static int invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 0; i < werte.length; i++) {
for (int j = werte.length - 1; i < j; j--) {
werte1[j] = werte[i];
}
}
return werte1[0];
}
这是我的代码,
我开发了一种应该反转数组的方法。
例如:在主要方法中:
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,2,3,4,7,5};
System.out.println(invertieren(a));
}
我需要位置 0 的那个 - werte1[0]
应该给我 5
回来。
werte1[0] = 5
werte1[1] = 7
werte1[2] = 4
我的新数组应该是这样的:int[] werte = {5,7,4,3,2,1}
我的问题之前没有得到回答,因为我在询问我的代码,以便从正确的过程中学习。
看起来您正在返回索引 0 处的值。
public static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
int len = werte.length - 1;
for (int i = 0; i < len; i++) {
werte1[len-i] = werte[i];
}
return werte1;
}
public static int[] invertieren(int[] werte){
int[] werte1 = new int[werte.length];
int length = werte.length-1;
for(int i= 0; i < werte.length; i++){
werte1[length-i] = werte[i];
}
return werte1;
}
您错误地使用了嵌套循环,请改用单个循环:
public int[] invertArray(int[] oldInts)
{
int[] newInts = new int[oldInts.length];
for (int i = oldInts.length - 1; i >= 0; i--)
{
newInts[oldInts.length - i - 1] = oldInts[i];
}
return newInts;
}
如果您这样做是为了 class 或为了您自己的知识,那么这不是您的答案。否则,我会使用 Apache Commons ArrayUtils。他们有几个重载的反向方法。
您不需要嵌套循环来反转数组。您只需要像这样遍历数组:
static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 0; i < werte.length; i++) {
werte1[i] = werte[werte.length - i - 1];
}
return werte1;
}
如果你想return反转数组,你需要将你原来方法的return类型改为return一个int[]
而不是一个int
,然后 return werte1
而不是 werte1[0]
.
要了解其工作原理,请假设 werte.length == 6
。所以对于 i = 0
我们有:
werte1[i] = werte[werte.length - i - 1]
werte1[0] = werte[6 - 0 - 1] = werte[5] = 5
对于i = 1
:
werte1[1] = werte[6 - 1 - 1] = werte[4] = 7
等等。所以我们通过 werte1
从 0
到 5
存储从 werte
从 5
到 0
的值。
如果您分析 invertieren()
目前的工作原理,您就会明白为什么结果是错误的:
Initial values:
werte = {1,2,3,4,7,5}
werte1 = {0,0,0,0,0,0}
for i = 0:
for j from 5 to 1:
werte1[j] = werte[0]
intermediate result: werte1 = {0,1,1,1,1,1}
for i = 1:
for j fom 5 to 2:
werte1[j] = werte[1]
intermediate result: werte1 = {0,1,2,2,2,2}
for i = 2:
for j from 5 to 3:
werte1[j] = werte[2]
intermediate result: werte1 = {0,1,2,3,3,3}
for i = 3:
for j from 5 to 4:
werte1[j] = werte[3]
intermediate result: werte1 = {0,1,2,3,4,4}
for i = 4:
for j from 5 to 5:
werte1[j] = werte[4]
final result: werte1 = {0,1,2,3,4,7}
for i = 5 it will do nothing, since j starts at 5.
根本不反转原数组,所以werte1[0] == 0
.
这是使用修改后的 main
方法的工作代码:
public static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 1; i <= werte.length; i++) {
werte1[i - 1] = werte[werte.length - i];
}
return werte1;
}
您修改后的main
方法:
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 7, 5};
for (int revVal : invertieren(a)) {
System.out.println(revVal);
}
}
我的代码:
public static int invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 0; i < werte.length; i++) {
for (int j = werte.length - 1; i < j; j--) {
werte1[j] = werte[i];
}
}
return werte1[0];
}
这是我的代码, 我开发了一种应该反转数组的方法。 例如:在主要方法中:
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,2,3,4,7,5};
System.out.println(invertieren(a));
}
我需要位置 0 的那个 - werte1[0]
应该给我 5
回来。
werte1[0] = 5
werte1[1] = 7
werte1[2] = 4
我的新数组应该是这样的:int[] werte = {5,7,4,3,2,1}
我的问题之前没有得到回答,因为我在询问我的代码,以便从正确的过程中学习。
看起来您正在返回索引 0 处的值。
public static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
int len = werte.length - 1;
for (int i = 0; i < len; i++) {
werte1[len-i] = werte[i];
}
return werte1;
}
public static int[] invertieren(int[] werte){
int[] werte1 = new int[werte.length];
int length = werte.length-1;
for(int i= 0; i < werte.length; i++){
werte1[length-i] = werte[i];
}
return werte1;
}
您错误地使用了嵌套循环,请改用单个循环:
public int[] invertArray(int[] oldInts)
{
int[] newInts = new int[oldInts.length];
for (int i = oldInts.length - 1; i >= 0; i--)
{
newInts[oldInts.length - i - 1] = oldInts[i];
}
return newInts;
}
如果您这样做是为了 class 或为了您自己的知识,那么这不是您的答案。否则,我会使用 Apache Commons ArrayUtils。他们有几个重载的反向方法。
您不需要嵌套循环来反转数组。您只需要像这样遍历数组:
static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 0; i < werte.length; i++) {
werte1[i] = werte[werte.length - i - 1];
}
return werte1;
}
如果你想return反转数组,你需要将你原来方法的return类型改为return一个int[]
而不是一个int
,然后 return werte1
而不是 werte1[0]
.
要了解其工作原理,请假设 werte.length == 6
。所以对于 i = 0
我们有:
werte1[i] = werte[werte.length - i - 1]
werte1[0] = werte[6 - 0 - 1] = werte[5] = 5
对于i = 1
:
werte1[1] = werte[6 - 1 - 1] = werte[4] = 7
等等。所以我们通过 werte1
从 0
到 5
存储从 werte
从 5
到 0
的值。
如果您分析 invertieren()
目前的工作原理,您就会明白为什么结果是错误的:
Initial values:
werte = {1,2,3,4,7,5}
werte1 = {0,0,0,0,0,0}
for i = 0:
for j from 5 to 1:
werte1[j] = werte[0]
intermediate result: werte1 = {0,1,1,1,1,1}
for i = 1:
for j fom 5 to 2:
werte1[j] = werte[1]
intermediate result: werte1 = {0,1,2,2,2,2}
for i = 2:
for j from 5 to 3:
werte1[j] = werte[2]
intermediate result: werte1 = {0,1,2,3,3,3}
for i = 3:
for j from 5 to 4:
werte1[j] = werte[3]
intermediate result: werte1 = {0,1,2,3,4,4}
for i = 4:
for j from 5 to 5:
werte1[j] = werte[4]
final result: werte1 = {0,1,2,3,4,7}
for i = 5 it will do nothing, since j starts at 5.
根本不反转原数组,所以werte1[0] == 0
.
这是使用修改后的 main
方法的工作代码:
public static int[] invertieren(int[] werte) {
int[] werte1 = new int[werte.length];
for (int i = 1; i <= werte.length; i++) {
werte1[i - 1] = werte[werte.length - i];
}
return werte1;
}
您修改后的main
方法:
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 7, 5};
for (int revVal : invertieren(a)) {
System.out.println(revVal);
}
}