Java 构造函数中的数组列表元素与函数中的数组列表元素不相等
构造函数中的数组列表请求等于传递给这个类的数组列表,但我尝试在函数calcHead中使用它,因为数组中的元素消失了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
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());
}