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

时间:2014-10-09 02:58:06

标签: java java-io

我正在从文本文件中读取数据,其格式如名称连字符值,例如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
....

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我有几点建议:

  1. 每个空间都需要一个“和”计数器。

  2. 您需要为每个空间分配一个名称列表。

  3. 考虑将其分解为更小的方法,每个方法都执行定义明确的任务。例如,您可能需要一个将整个文件读入内存的方法,另一个将人分配给空间的方法,以及另一个打印输出的方法。将复杂的任务分解成更小的部分有助于您单独关注每个部分。

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