Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造函数中的数组列表元素与函数中的数组列表元素不相等_Java - Fatal编程技术网

Java 构造函数中的数组列表元素与函数中的数组列表元素不相等

Java 构造函数中的数组列表元素与函数中的数组列表元素不相等,java,Java,构造函数中的数组列表请求等于传递给这个类的数组列表,但我尝试在函数calcHead中使用它,因为数组中的元素消失了 import java.io.*; import java.util.*; public class C_SCAN { private ArrayList<Integer> requests = new ArrayList<Integer>(); C_SCAN(ArrayList<Integer> r){ th

构造函数中的数组列表请求等于传递给这个类的数组列表,但我尝试在函数calcHead中使用它,因为数组中的元素消失了

import java.io.*;
import java.util.*;

public class C_SCAN {
    private ArrayList<Integer> requests = new ArrayList<Integer>();

    C_SCAN(ArrayList<Integer> r){
        this.requests = r;
        System.out.println(requests.size());

    }

    public int calcHead(int start , int end) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter("sequence.txt", true));
        writer.write(" \nC_SCAN : ");
        int THM = 0;
        System.out.println(requests.size());
        requests.add(start);
        sortReq(requests);
        int current = requests.indexOf(start);
        for(int i = current; i > 0; i--) {
            THM += Math.abs(requests.get(i) - requests.get(i - 1));
            writer.write(String.valueOf(requests.get(i)));
        }
        THM += Math.abs(requests.get(0));
        THM += end;
        THM += end - requests.get(requests.size() -1);
        for(int i = requests.size() - 1; i > current + 1; i--) {
            THM += Math.abs(requests.get(i) - requests.get(i - 1));
            writer.write(String.valueOf(requests.get(i)));
        }
        writer.write("\ntotal head movement : " + String.valueOf(THM));
        writer.close();
        return THM;
    }

    public void sortReq(ArrayList<Integer> requests) {
        for(int i = 0; i < requests.size(); i++) {
            for(int j = 0; j < requests.size(); j++) {
                if(requests.get(j) > requests.get(i)) {
                    Collections.swap(requests, i, j);
                }
            }
        }
    }

}
import java.io.*;
导入java.util.*;
公共类C_扫描{
私有ArrayList请求=新建ArrayList();
C_扫描(阵列列表r){
此参数=r;
System.out.println(requests.size());
}
公共int-calcHead(int-start,int-end)抛出IOException{
BufferedWriter=newbufferedwriter(newfilewriter(“sequence.txt”,true));
writer.write(“\nC\u SCAN:”);
int-THM=0;
System.out.println(requests.size());
请求。添加(开始);
sortReq(请求);
int current=requests.indexOf(开始);
对于(int i=当前;i>0;i--){
THM+=Math.abs(requests.get(i)-requests.get(i-1));
writer.write(String.valueOf(requests.get(i));
}
THM+=Math.abs(requests.get(0));
THM+=结束;
THM+=end-requests.get(requests.size()-1);
对于(int i=requests.size()-1;i>current+1;i--){
THM+=Math.abs(requests.get(i)-requests.get(i-1));
writer.write(String.valueOf(requests.get(i));
}
writer.write(“\n总头移动:“+String.valueOf(THM));
writer.close();
返回THM;
}
公共无效sortReq(ArrayList请求){
对于(int i=0;irequests.get(i)){
集合。交换(请求,i,j);
}
}
}
}
}

我可以向您保证,构造函数列表与方法中的引用相同

如果您提到列表元素“消失”,那么在对列表进行迭代(两次)并可能覆盖它们时,您似乎正在移动列表中的元素

通过在排序方法之前和之后打印列表进行调试,我认为您将看到一个问题

正确的迭代过程如下所示(开始
j=i+1
),这样索引就永远不会匹配,也不会多次比较相同的元素

public void sortReq(List<Integer> requests) {
    for(int i = 0; i < requests.size(); i++) {
        for(int j = i + 1; j < requests.size(); j++) {

问题出在名为“sortReq”的函数中

public void sortReq(ArrayList请求){/..}

参数请求此函数的具有相同的名称 作为类的数据成员

如何解决问题?

将参数名称更改为sortReq函数, 或者删除函数的参数可能有助于解决此问题

需要注意的重要一点:

类的方法可以直接访问同一类的数据成员


因此,数据成员的名称不需要作为参数传递给同一类的方法。

向我们展示用于实例化
C\u SCAN
类并使用
calcHead
方法的代码示例。欢迎使用Stackoverflow。请检查并说明如何以简洁、负责的方式提供回答ypur问题所需的所有信息。
public class C_SCAN {
    private final List<Integer> requests;

    C_SCAN(List<Integer> r){
        this.requests = r;
        System.out.println(requests.size());

    }