我正在从文本文件中读取数据,其格式如名称连字符值,例如John - 0.75
。值是平方英尺,我想将它们分配到空格中。我有四个预定义的空格,即space1,space2,space3和space4。 space1和space2总共4平方英尺。 space3和space4总共5平方英尺。
输入值也可以是名为spacer的值,表示1/6平方英尺。所以理想情况下那些可能会进入space3和space4。我试图开发的解决方案应该针对不同的输入类型。这是迄今为止的目标。
public class SpaceAllocator {
public static void main(String[] args) throws IOException {
double space1= 4.0;
double space2 = 4.0;
double space3= 5.0;
double space4 = 5.0;
BufferedReader buffReader = null;
try {
buffReader = new BufferedReader(new FileReader(new File("input.txt")));
String line = null;
String name = null;
double sqrFeet = 0.0;
double space1Counter = 0.0;
double space2Counter = 0.0;
double space3Counter = 0.0;
double space4Counter = 0.0;
double sqrFeetSum = 0.0;
while ((line = buffReader.readLine()) != null){
String[] tempArr = line.replace("'", "").split("-");
name = (tempArr[0]!=null)?tempArr[0].trim():"";
if(tempArr[1]!=null && "spacer".equalsIgnoreCase(tempArr[1].trim())){
sqrFeet = 0.166;
} else {
sqrFeet = Double.parseDouble( (tempArr[1]!=null)?tempArr[1].trim():"0");
}
sqrFeetSum +=sqrFeet;
if(sqrFeetSum <space1 && space1Counter<space1 ){
space1Counter++;
} else if( sqrFeetSum == space1 ){
sqrFeetSum =0.0;
space1=0.0;
} else if( sqrFeetSum <space2 && space2Counter<space2){
space2Counter++;
} else if(sqrFeetSum == space2){
sqrFeetSum =0;
space2=0;
} else if( sqrFeetSum <space3 && space3Counter<space4){
space3Counter++;
} else if(sqrFeetSum == space3){
sqrFeetSum =0;
space3 =0.0;
} else if( sqrFeetSum <space4 && space4Counter<space4){
space4Counter++;
} else if(sqrFeetSum == space4){
sqrFeetSum =0;
space4=0.0;
}
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
buffReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
这是我的示例输入文件。
John - 1
Lucy - .5
Jack - .75
Adam - .75
Nancy - .75
Jason - 'spacer'
Joe - 1
Molly - .75
Kindell - .5
Jose - .5
Madison - .75
David - 1
Harry - 1
Norman - .75
Ortez - .5
Patrick - .5
Jackie - 1
Laura - .5
Randy - .5
输出类似的内容,不完全是
space 1
John
Jack
....
space 2
Smith
Lucy
...
space 3
Ortez
....
space 4
Jackie
....
有什么建议吗?
答案 0 :(得分:1)
我有几点建议:
每个空间都需要一个“和”计数器。
您需要为每个空间分配一个名称列表。
考虑将其分解为更小的方法,每个方法都执行定义明确的任务。例如,您可能需要一个将整个文件读入内存的方法,另一个将人分配给空间的方法,以及另一个打印输出的方法。将复杂的任务分解成更小的部分有助于您单独关注每个部分。
您可能希望创建一个Space
类,该类具有add()
方法,可以将人员添加到该空间。该类将封装1和2中建议的总和和名称列表。