Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于输入段的循环调用函数_Java_Loops_Iteration - Fatal编程技术网

Java 基于输入段的循环调用函数

Java 基于输入段的循环调用函数,java,loops,iteration,Java,Loops,Iteration,我正在做一项课堂作业。我需要读入一个包含输入行的文件。三行的每个块都是一个结构化集:第一个是一个多项式,第二个是另一个多项式,第三个是表示多项式算术代数运算的文本字符串。我已经设置了我的程序,它将每一行读入一个数组,然后我将包含整数的两个数组索引解析为多项式项。我根据第三行调用相应的函数。我的奋斗目标是找到一种方法,让流程在每三行之后重置。这是我的主要功能的代码。我想我会用一个I-loop(这里是k-loop),但我不能让它工作。非常感谢您的任何见解或建议 输入示例: 3 2 4 5 5 7

我正在做一项课堂作业。我需要读入一个包含输入行的文件。三行的每个块都是一个结构化集:第一个是一个多项式,第二个是另一个多项式,第三个是表示多项式算术代数运算的文本字符串。我已经设置了我的程序,它将每一行读入一个数组,然后我将包含整数的两个数组索引解析为多项式项。我根据第三行调用相应的函数。我的奋斗目标是找到一种方法,让流程在每三行之后重置。这是我的主要功能的代码。我想我会用一个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;
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
多项式p1=新多项式();
多项式p2=新多项式();
int行=0;
列表=新的ArrayList();
试一试{
BufferedReader=newBufferedReader(newFileReader(“Test.txt”);
字符串行=null;
而((line=reader.readLine())!=null){
列表。添加(行);
行++;
}//结束时
}catch(filenotfounde异常){
e、 printStackTrace();
}
系统输出打印项次(“行”+行);

对于(int k=0;k建议:尝试类似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);
    }
它可用于将字符串读取到(默认情况下以空格分隔)


经过一个良好的睡眠,我终于找到了答案。我使用了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;
        }
    }
}
publicstaticvoidmain(字符串[]args)引发IOException{
//TODO自动生成的方法存根
多项式p1=新多项式();
多项式p2=新多项式();
int行=0;
列表=新的ArrayList();
试一试{
BufferedReader=newBufferedReader(newFileReader(“Test.txt”);
字符串行=null;
而((line=reader.readLine())!=null){
列表。添加(行);
行++;
}//结束时
}catch(filenotfounde异常){
e、 printStackTrace();
}
系统输出打印项次(“行”+行);
String[]stringArr=list.toArray(新字符串[0]);

对于(intk=0;kt谢谢!我正在学习从文件中读取输入,所以有关扫描仪的提示非常有用。
        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;
        }
    }
}