Java 将从输入文件读取的值排列到预定义的空间/块中

Java 将从输入文件读取的值排列到预定义的空间/块中,java,java-io,Java,Java Io,我从一个文本文件中读取数据,其格式类似于名称连字符值,例如John-0.75。值为平方英尺,我想将它们分配到空间中。我有四个预定义的空间,即space1、space2、space3和space4。space1和space2总面积为4平方英尺。space3和space4总面积为5平方英尺 输入值也可以是一个称为间隔的值,表示1/6平方英尺。理想情况下,它们可能进入第三空间和第四空间。我尝试开发的解决方案应该适用于不同的输入类型。以下是迄今为止我们所做的 public class SpaceAllo

我从一个文本文件中读取数据,其格式类似于名称连字符值,例如
John-0.75
。值为平方英尺,我想将它们分配到空间中。我有四个预定义的空间,即space1、space2、space3和space4。space1和space2总面积为4平方英尺。space3和space4总面积为5平方英尺

输入值也可以是一个称为间隔的值,表示1/6平方英尺。理想情况下,它们可能进入第三空间和第四空间。我尝试开发的解决方案应该适用于不同的输入类型。以下是迄今为止我们所做的

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();
        }
    }

}
输出这样的东西,不完全是

space 1
John
Jack
....

space 2
Smith
Lucy
...

space 3
Ortez
....


space 4
Jackie
....

有什么建议吗?

我有几个建议:

  • 每个空间都需要一个“总和”计数器

  • 您需要为每个空间指定一个名称列表

  • 考虑将其分解为更小的方法,每个方法执行定义良好的任务。例如,您可能需要一个将整个文件读入内存的方法,另一个将人员分配到空间的方法,以及另一个打印输出的方法。把一项复杂的任务分解成几个小部分,有助于你将注意力集中在每一部分上

  • 您可能希望创建一个
    空间
    类,该类具有一个
    add()
    方法来向该空间添加人员。此类将封装1和2中建议的名称的总和和列表


  • 这里的问题到底是什么?我试图分配值/用户,但似乎无法正确分配。这听起来像是。除了不超过每个“空间”的大小之外,还有其他限制吗?@Code peedint是的。只需将它们分配到预定义的空间中,除了不超过预定义空间的大小之外,没有其他约束。谢谢您的回答。我被任务部分卡住了。对于与空格关联的名称,我想我需要一个HashMap hm=newhashmap();用于打印零件。
    space 1
    John
    Jack
    ....
    
    space 2
    Smith
    Lucy
    ...
    
    space 3
    Ortez
    ....
    
    
    space 4
    Jackie
    ....