2017-02-24 49 views
-4

我主要想知道的是: 在行public static void val(int[] x)(int[] x)做什么? 另外:为什么我会得到最终加起来值当我问爪哇给我同样的过程不同的结果

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

但不适用于:

int y=2+i2; 
    System.out.println(y); 

为什么心不是谷()方法不转换“I2”的值改为“X “立即,然后继续编译通过使用”x“值为后续'i2'计算....对不起,如果我的问题是模糊的....我只是不知道如何把它....谢谢

完整代码:

public static void main(String[] args) { 

    int[] i = { 25, 22 }; 
    int i2 = 41; 
    val(i); 
    for (int y : i) { 
     System.out.println(y); 
    } 
    vale(i2); 
    int y = 2 + i2; 
    System.out.println(y); 

} 

public static void val(int[] x) { 
    for (int c = 0; c < x.length; c++) { 
     x[c] *= 2; 
    } 

} 

public static void vale(int x) { 
    x += 23; 
} 
+0

https://docs.oracle.com/javase/tutorial/java/index.html –

+0

您的方法'vale(int x)'没有任何意义。你不能像这样重新作用一个变量。你必须返回结果并且调用者必须处理它。 –

回答

0

我认为你需要阅读有关Java中的价值和基准通行。关于你的问题,val(i) & vale(i2)在技术上是按价值传递的。由于数组是对象类型,所以在val(i)的情况下,其引用将传递给方法,因此您可以在打印引用时看到修改。但是,vale(i2)将原始整数类型作为参数,因此方法内的修改不会影响原始值。为了更好地理解您可以修改您的VAL(INT [] x)的方法如下:

public static void val(int[] x) { 
     x = new int[] {35, 57}; 
     for (int c = 0; c < x.length; c++) { 
      x[c] *= 2; 
     } 
    } 

我只是说x = new int[] {35, 57};这将使x点的值不同的参考,并不会影响到原来的值。希望澄清!

-1
  • 您的方法val(int [] x)在此代码中完全没有实现。它返回void(没有)到main()函数的操作,你瓶坯内VAL()与数组x x的副本完成...

可能的解决办法:

public static int[] val(int[] x){ 
int[] newarr = new int[x.length]; 
for (int c=0; c<x.length;c++){ 
    newarr[c] = x[c]*2; 
} 
return newarr; 
} 

主:

int[] i={25,22}; 

i = val(i); // creates an array with every element doubled and assigns it to i 
  • 同样的故事与淡水河谷()!