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