Java 在读入所有参数之前,如何延迟对象创建?
我试图解决一个问题,即创建一个具有多个参数的自定义对象,但是必须首先使用Java 在读入所有参数之前,如何延迟对象创建?,java,constructor,java.util.scanner,Java,Constructor,Java.util.scanner,我试图解决一个问题,即创建一个具有多个参数的自定义对象,但是必须首先使用扫描仪逐个找到这些参数 因此,基本上,给定一个输入文件,其中每一行将代表一个具有多个属性的新对象(一个县及其名称、犯罪索引等),我使用带while循环的扫描仪来逐行扫描输入文件,然后在这个循环中,我使用另一个while循环和一个新的扫描器,然后扫描行中的每个单词。这样,我就可以分离所有对象的属性,然后通过将所有这些值传递给构造函数来创建对象 我不明白的是,如何延迟对象的创建,直到我在每一行中都有了每个单词,因为输入文件中的每
扫描仪
逐个找到这些参数
因此,基本上,给定一个输入文件,其中每一行将代表一个具有多个属性的新对象(一个县及其名称、犯罪索引等),我使用带while循环的扫描仪来逐行扫描输入文件,然后在这个循环中,我使用另一个while循环和一个新的扫描器,然后扫描行中的每个单词。这样,我就可以分离所有对象的属性,然后通过将所有这些值传递给构造函数来创建对象
我不明白的是,如何延迟对象的创建,直到我在每一行中都有了每个单词,因为输入文件中的每一行都将成为一个对象,而该行中的每个单词都将用作对象的参数
有人知道如何在不必将所有单词存储到数组或类似的东西中的情况下有效地执行此操作吗
下面是object类中的构造函数,它将获取一行的所有单词,这些单词都按正确的顺序排列,并为输入文件中的每一行创建一个新对象:
public CountyItem(String countyName, String countyState, double countyPercentageClintonVoters, double countyResidentMedianAge,
int countyResidentMeanSavings, int countyPerCapitaIncome, double countyPercentageBelowPovertyLevel,
double countyPercentageVeterans, double countyPercentageFemale, double countyPopulationDensity,
double countyPercentageLivingInNursingHomes, int countyCrimeIndexPerCapita){
itemCountyName = countyName;
itemCountyState = countyState;
itemCountyPercentageClintonVoters = countyPercentageClintonVoters;
itemCountyResidentMedianAge = countyResidentMedianAge;
itemCountyResidentMeanSavings = countyResidentMeanSavings;
itemCountyPerCapitaIncome = countyPerCapitaIncome;
itemCountyPercentageBelowPovertyLevel = countyPercentageBelowPovertyLevel;
itemCountyPercentageVeterans = countyPercentageVeterans;
itemCountyPercentageFemale = countyPercentageFemale;
itemCountyPopulationDensity = countyPopulationDensity;
itemCountyPercentageLivingInNursingHomes = countyPercentageLivingInNursingHomes;
itemCountyCrimeIndexPerCapita = countyCrimeIndexPerCapita;
}
这是我的程序的主要方法(当然还没有完成),它显示了我计划使用嵌套的while循环和两个单独的扫描器,首先读取输入文件中的每一行,然后读取该行中的每一个字:
public static void main(String[] args) throws IOException{
//Scanner and FileWriter
Scanner inFile = new Scanner(new FileReader("data/test1.txt")); //change this to use different test .txt file
FileWriter outFile = new FileWriter("data/output.txt");
//loops through each line in inputl.txt until end is reached
while(inFile.hasNextLine()){
String line = inFile.nextLine();
Scanner lineScanner = new Scanner(line);
//loops through every word in a given line
while(lineScanner.hasNext()){
}
lineScanner.close();
}
inFile.close();
}
您可以使用生成器模式慢慢建立构造函数的依赖关系,也可以只引入另一个接受文件的构造函数,然后可以将主方法中的所有逻辑移到该构造函数中。参考生成器模式-您创建的CountyItem可以而且应该是不可变的。出于这个原因,并且由于您有很多参数,建议使用生成器模式来解决这个问题。使用构建器,在对象的所有数据都可以组装之前,对象不会实例化。每当您有许多方法/构造函数参数时,您应该通过使用构建器模式或将“相关”参数分解到类中来改进设计,然后将其编入顶级CountyItem
。如果构造函数在文件中找不到所需的所有内容,则可以让构造函数抛出异常。这不是一个论坛,它是为问答而创建的网站。你不需要在标题中添加标签或“已解决”,也不应该这样做。如果有人回答了你的问题,就接受这个答案。为什么我没有想到呢!?这种建筑模式正是对我有帮助的!谢谢大家!@随时都可以