java - 如何修改通过 void 方法传递的变量(必须为 void)并更改方法外部的值 (Java)

标签 java variables methods arraylist void

我正在上高中,正在参加 AP 计算机编程类(class) (Java)。在我的类(class)中,我必须创建一个 void对传入的数组进行排序的方法。它必须是 void (要求)并且需要修改传递给它的变量(要求)。我必须使用他们提供的运行者代码。我对编码相当陌生,并且仍然对语言能做什么和不能做什么感到有点困惑。排序有效,但我看不到如何修改 main 传入的变量方法。

public class InsertionSort extends Sort {
    public <T extends Comparable<T>> void sortList(ArrayList<T> arr) {
        ArrayList<T> arr2 = new ArrayList<T>(arr.size());

        for (int i = 0; i < arr.size(); i++) {
            boolean done = false;
            int insertIndex = 0;
            int k = i;
            T next = arr.get(i);

            while (k>0 && insertIndex == 0) {
                if (next.compareTo(arr2.get(k-1)) > 0) {
                    // System.out.println("if i" + i + " k" + k); 
                    insertIndex = k;
                    done = true;
                }

                k--;
            }

            arr2.add(insertIndex, arr.get(i));
        }
        //System.arraycopy(arr2,0,arr,0,arr2.size());
        arr = arr2; //<--my attempt to alter runner variable
        //System.out.println(" arr 2 = " + arr2);
        //System.out.println(" arr 1 = " + arr);
    }
}

//运行者

public static void main( String[] args )
{
  ArrayList<String> s = new ArrayList<String>();
  String[] sArr = { "you", "can", "observe", "a", "lot", "just", "by", "watching" };
  for ( String x : sArr ) { s.add( x ); }
  Sort ss = new InsertionSort();
  ss.sortList( s );
  System.out.println( s );
}

我基本上需要修改ArrayList (s) 调用 sortList() 时方法(已排序),然后从对 System.out.println() 的调用中打印出来。

排序有效,但“s”不会改变,我不知道从哪里开始修复它。调用者完全是一成不变的(类要求),并且类和方法头必须保持相同(出于相同的原因)。

我可能在复制和粘贴过程中遗漏了“{”或“}”。

最佳答案

您可以修改ArrayList arr的内容。首先,清空内容。然后添加第二个 List 中的元素。类似的东西

// arr = arr2; // <--my attempt to alter runner variable
arr.clear(); // <-- empty arr
arr.addAll(arr2); // <-- copy arr2 contents to arr.

List.clear()说(部分)

The list will be empty after this call returns.

List.addAll(Collection)说(部分)

Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator (optional operation).

最后,您无法使用 arr = arr2; 修改调用者对传入的 List 的引用,因为(即使 Java 总是按值传递)值对象引用

关于java - 如何修改通过 void 方法传递的变量(必须为 void)并更改方法外部的值 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29572762/

相关文章:

java - 为什么方法在声明之前在 Java 中可用?

java - (Java) 是否有一种对象类型可以处理从基元到数组的任何内容?

JavaScript 原型(prototype)扩展

variables - Pascal-如何将实数转换为整数变量

python - 如何在类方法中创建全局类var

java - Java 中的 HTTP header 编码/解码

c - C中的共享全局变量

java - 如何防止同步方法中的死锁?

java - 我在 java 方法代码中遇到问题,该代码返回两个数字的除法

java - Java JIT 在运行 JDK 代码时会作弊吗?