基于输入段循环调用函数

时间:2016-03-30 02:54:48

标签: java loops iteration

我正在上课。我需要读入包含输入行的文件。三行的每个块都是结构化集合:第一个是一个多项式,第二个是另一个多项式,第三个是表示多项式算术的代数运算的文本字符串。我已经设置了我的程序,以便它将每一行读入一个数组,然后我将包含整数的两个数组索引解析为我的多项式项。我基于第三行调用适当的函数。我的奋斗是找到一种方法让每个第三行后重置过程。这是我的主要功能的代码。我想我会以某种方式使用i-loop(这里是k-loop),但我无法让它工作。任何见解或建议都非常感激。

输入示例:

3 2 4 5

5 7 4 6

subtract

4 3 5 1

1 2 3 4

add

这是我的代码:

public static void main(String[] args) throws IOException {

    Polynomial p1 = new Polynomial();
    Polynomial p2 = new Polynomial();
    int lines = 0;

    List<String> list = new ArrayList<String>();

    try {
        BufferedReader reader = new BufferedReader(new FileReader("Test.txt"));

        String line=null;

        while((line = reader.readLine()) != null) {
            list.add(line);
            lines++;
        } // end while
    } catch (FileNotFoundException e){
        e.printStackTrace();
    }
    System.out.println("lines " + lines);

    for (int k=0; k<lines; k++){
        String[] stringArr = list.toArray(new String[0]);
        System.out.println(stringArr[k+0]);
        System.out.println(stringArr[k+1]);
        System.out.println(stringArr[k+2]);

        String[] nums1 = stringArr[k+0].split(" ");
        String[] nums2 = stringArr[k+1].split(" ");

        for (int i=0; i<nums1.length; i+= 2) {
            p1.addTerm(Integer.parseInt(nums1[i]), Integer.parseInt(nums1[i+1]));
        }
        for (int i=0; i<nums2.length; i+= 2) {
            p2.addTerm(Integer.parseInt(nums2[i]), Integer.parseInt(nums2[i+1]));
        }

        if (stringArr[k+2].equalsIgnoreCase("add")) {add(p1,p2);}
        else if (stringArr[k+2].equalsIgnoreCase("subtract")) {subtract(p1,p2);}
        else if(stringArr[k+2].equalsIgnoreCase("multiply")) {multiply(p1,p2);}
        else {
            System.out.println("Bad input");
        }
        nums1=null;
        nums2=null;
    }
}

2 个答案:

答案 0 :(得分:0)

建议:尝试像Scanner类这样的东西?如果文件中的行不足,请抓住NoSuchElementException

 Scanner scanner = new Scanner(new String("input"));

 while(scanner.hasNextLine()) {
        String lineOne = scanner.nextLine();
        String lineTwo = scanner.nextLine();
        String lineThree = scanner.nextLine();
        calculateSomething(lineOne, lineTwo, lineThree);
    }

它可用于读取字符串(默认为空格分隔)

 private static int[] getPolynomialFactors(String line) {
    Scanner splitter = new Scanner(line);

    int[] p = new int[4];
    int counter=0;

    while (splitter.hasNextInt()){
        p[counter] = splitter.nextInt();
        counter++;
    }
    return  p;
}

答案 1 :(得分:0)

有了一个美好的夜晚,我能够弄清楚。我使用了for循环,只需要修改循环计数器的递增。我将指向我用于存储从代码块的前两行解析的整数的整数数组的指针调整,这有效地重置了它们。这是我的更新代码:

        public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Polynomial p1 = new Polynomial();
        Polynomial p2 = new Polynomial();
        int lines = 0;

        List<String> list = new ArrayList<String>();

        try {
            BufferedReader reader = new BufferedReader(new FileReader("Test.txt"));

            String line=null;

            while((line = reader.readLine()) != null) {
                list.add(line);
                lines++;
            } // end while
        } catch (FileNotFoundException e){
            e.printStackTrace();
        }
        System.out.println("lines " + lines);
        String[] stringArr = list.toArray(new String[0]);


        for (int k=0; k<lines; k+=3){

            System.out.println(stringArr[k+0]);
            System.out.println(stringArr[k+1]);
            System.out.println(stringArr[k+2]);             


            String[] nums1 = stringArr[k+0].split(" ");
            String[] nums2 = stringArr[k+1].split(" ");

            for (int i=0; i<nums1.length; i+= 2) {
                p1.addTerm(Integer.parseInt(nums1[i]), Integer.parseInt(nums1[i+1]));
            }
            for (int i=0; i<nums2.length; i+= 2) {
                p2.addTerm(Integer.parseInt(nums2[i]), Integer.parseInt(nums2[i+1]));
            }

            if (stringArr[k+2].equalsIgnoreCase("add")) {add(p1,p2);}
            else if (stringArr[k+2].equalsIgnoreCase("subtract")) {subtract(p1,p2);}
            else if(stringArr[k+2].equalsIgnoreCase("multiply")) {multiply(p1,p2);}
            else {
                System.out.println("Bad input");
                break;
            }
            nums1=null;
            nums2=null;
        }
    }
}