错误:变量可能尚未初始化 - 如何初始化ArrayList?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:变量可能尚未初始化 - 如何初始化ArrayList?相关的知识,希望对你有一定的参考价值。
我已经审查了所有以前的问题,并且标题与此类似,但我无法找到解决方案。所有错误都表明我没有初始化ArrayList ..我是不是用= new ArrayList<Double>
初始化ArrayList?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.PrintWriter;
public class main
{
public static void main (String[] args) throws FileNotFoundException
{
ArrayList<Double> RPM, bCoeffs, filteredRPM = new ArrayList<Double>();
Scanner RPMFile = new Scanner(new File("RotationSpeed.txt"));
while(RPMFile.hasNextLine()){
String line = RPMFile.nextLine();
Scanner scanner = new Scanner(line);
scanner.useDelimiter(",");
while(scanner.hasNextDouble()){
RPM.add(scanner.nextDouble());
}
scanner.close();
}
RPMFile.close();
int windowSize = 10;
int filterItterations = 1;
for (int i = 0; i < windowSize; i++){
double temp = 1/windowSize;
bCoeffs.add(temp);
}
for (int k = 1; k <= filterItterations; k++){
if (k == 1){
for (int n = windowSize; n < RPM.size(); n++){
int m = 0;
double tempYSum = 0;
for (int j = 0; j < windowSize; j++){
double tempY = (bCoeffs.get(j))*(RPM.get(n-m));
tempYSum += tempY;
m++;
}
filteredRPM.add(tempYSum);
}
}else{
int i = 1;
for (int n = windowSize; n < filteredRPM.size(); n++){
int m = 0;
double tempYSum = 0;
for (int j = 0; j < windowSize; j++){
double tempY = (bCoeffs.get(j))*(filteredRPM.get(n-m));
tempYSum += tempY;
m++;
}
filteredRPM.set(i, tempYSum);
i++;
}
}
}
}
}
我收到的错误如下:
main.java:20: error: variable RPM might not have been initialized
RPM.add(scanner.nextDouble());
^
main.java:31: error: variable bCoeffs might not have been initialized
bCoeffs.add(temp);
^
main.java:36: error: variable RPM might not have been initialized
for (int n = windowSize; n < RPM.size(); n++){
^
main.java:40: error: variable bCoeffs might not have been initialized
double tempY = (bCoeffs.get(j))*(RPM.get(n-m));
^
main.java:52: error: variable bCoeffs might not have been initialized
double tempY = (bCoeffs.get(j))*(filteredRPM.get(n-m));
^
5 errors
答案
只需分配变量:您当前正在声明3个变量,但只为最后一个赋值。
ArrayList<Double> RPM = new ArrayList<>(), bCoeffs = new ArrayList<>(), filteredRPM = new ArrayList<>();
注意,有些人不鼓励在同一行上声明许多变量,例如: it is forbidden by Google's style guide:如果你每行做一个,它会更容易阅读:
ArrayList<Double> RPM = new ArrayList<>();
ArrayList<Double> bCoeffs = new ArrayList<>();
ArrayList<Double> filteredRPM = new ArrayList<>();
另一答案
虽然您的第一行可能看起来像初始化所有三个ArrayLists,但它基本上执行以下操作:
ArrayList<Double> RPM;
ArrayList<Double> bCoeffs;
ArrayList<Double> filteredRPM = new ArrayList<Double>();
如果它按照您可能想要的方式工作,但您会创建许多需要澄清的潜在问题。例如:现在所有三个变量都指向相同的内存(换句话说是同一个ArrayList)?或者它们都指向不同的ArrayList。
有一个原因是不鼓励在一行中初始化几个变量,因为它非常混淆。
你这样做的正确方法是:
ArrayList<Double> RPM = new ArrayList<>();
ArrayList<Double> bCoeffs = new ArrayList<>();
ArrayList<Double> filteredRPM = new ArrayList<>();
以上是关于错误:变量可能尚未初始化 - 如何初始化ArrayList?的主要内容,如果未能解决你的问题,请参考以下文章
导致 java:240 的 switch 语句(可能尚未初始化)