当前位置: 首页 > 知识库问答 >
问题:

无法更新数组的内容

邓业
2023-03-14

在我的程序中,我将一个数组传递给一个名为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

共有3个答案

罗建弼
2023-03-14

这是因为当您说arr=new int[size]时,您不再使用原始引用。如果您在退出setArray方法之前打印数组,您可以检查它:它在内部被创建,但在外部您的旧引用没有被更改。

车诚
2023-03-14

setArray的中途,您将用一个全新的数组替换参数arr的值,然后在其中设置值。但是旧的数组仍然存在——它不再被参数arr引用。但是,旧数组仍然由create中的变量a引用,因此它是最终打印出来的数组。

孙成化
2023-03-14

数组引用按值传递,这意味着如果更改引用指向的内容(通过=使用赋值),它不会更改传递到函数中的数组内容,因为原始数组引用仍将指向原始数组内容。作业只改变了原始参考的副本所指向的内容。

但是,您的代码可以通过简单地从函数返回数组来轻松修复:

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