在我的程序中,我将一个数组传递给一个名为setArray()的方法。但我还是从数组中得到了0值。。
class Test{
void setArray(int arr[]){
Scanner in=new Scanner(System.in);
int size;
System.out.print("\nEnter the size : ");
size=in.nextInt();
arr=new int[size];
System.out.print("\nEnter the elements one by one : ");
for(int i=0;i<size;i++){
arr[i]=in.nextInt();
}
}
void create(){
int a[]={0};
setArray(a);
System.out.print("output : ");
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
public static void main(String[] args)throws IOException{
Test t=new Test();
t.create();
}
}
输入尺寸: 4
逐一输入元素:1 2 3 4
输出: 0
这是因为当您说arr=new int[size]时,您不再使用原始引用。如果您在退出setArray方法之前打印数组,您可以检查它:它在内部被创建,但在外部您的旧引用没有被更改。
在setArray
的中途,您将用一个全新的数组替换参数arr
的值,然后在其中设置值。但是旧的数组仍然存在——它不再被参数arr
引用。但是,旧数组仍然由create
中的变量a
引用,因此它是最终打印出来的数组。
数组引用按值传递,这意味着如果更改引用指向的内容(通过=
使用赋值),它不会更改传递到函数中的数组内容,因为原始数组引用仍将指向原始数组内容。作业只改变了原始参考的副本所指向的内容。
但是,您的代码可以通过简单地从函数返回数组来轻松修复:
int[] getArray(){
Scanner in=new Scanner(System.in);
int size;
System.out.print("\nEnter the size : ");
size=in.nextInt();
int[]arr=new int[size];
System.out.print("\nEnter the elements one by one : ");
for(int i=0;i<size;i++){
arr[i]=in.nextInt();
}
return arr;
}
或者,如果您事先知道数组的大小,您可以通过传递值的数组引用来访问数组内容。下面是一个函数的示例,它将以函数调用者可见的方式修改数组:
void setValue(int[]arr, int pos, int val) {
arr[pos] = val;
}
因此,代码中的问题是在函数内部调用arr=new int[size];
。
这是具有状态(值和项)的父组件。我试图将值状态作为道具传递给子组件。当我点击按钮时,在render方法中执行的代码正在执行切换。但当我调用componentDidMount中的list函数时,切换不起作用,但执行了click事件。 这是我的子组件,其中状态作为道具传递 我知道组件didmount只执行一次。但是除了在render方法中直接编写JSX之外,如何使它工作呢
我有一系列推车。我想更新请求对象中的产品数量。即。 我有一个数组的产品和数量,比如: 我想更新它们,如: 这可能的逻辑是什么?
问题内容: 我正在通过ng-repeat循环渲染数据。而且我希望它在更新数组时进行更新。从我阅读的内容来看,这应该会自动发生,但是这是行不通的。那我在做什么错? 的HTML: 控制器(此功能通过ng-click在按钮上触发): Console.log显示该数组已正确更新,但是我视图中的表未更改。我不知道我在做什么错。 问题答案: 那是因为您在method中更改了数组引用。 为了避免这种情况,我们使
我有文件
我有一个从Firebase获取数据的服务。该服务提供了一个可观察的,然后我在组件类中订阅它。当数据被加载并发送到数组时,DOM会更新新数据,但是我需要在DOM更新后再次运行一些javascript和jQuery代码,我不知道如何运行。 我的服务方式是这样的: 和我的组件: 我看了一些RxJS的文档,但是没有用。我想我可以按照他们给出的例子重写它: 但“完成”永远不会开火。 Angular 2的on
问题内容: import java.awt.event.ActionListener; import java.util.; import java.awt. ; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.ActionEvent; import java