我正在读取.txt文件以创建多项式。我在实际打印多项式时遇到了麻烦(在将它们放入链表后)。我真的不确定如何“链接”链表和多项式方法......
文字档案:
P1 = 3 5 1 -1 0 8
P2 = 5 6 2 -1 1 7 0 -4
p3 = p1 + p2
p4 = p3 - p1
代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
public class Polynomial {
public Term first;
public Term last;
private int[] coef; // coefficients
private int deg; // degree of polynomial (0 for the zero polynomial)
// a * x^b
public Polynomial(int a, int b) {
coef = new int[b + 1];
coef[b] = a;
deg = degree();
}
// return the degree of this polynomial (0 for the zero polynomial)
public int degree() {
int d = 0;
for (int i = 0; i < coef.length; i++)
if (coef[i] != 0)
d = i;
return d;
}
// return c = a + b
public Polynomial plus(Polynomial b) {
Polynomial a = this;
Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
for (int i = 0; i <= a.deg; i++)
c.coef[i] += a.coef[i];
for (int i = 0; i <= b.deg; i++)
c.coef[i] += b.coef[i];
c.deg = c.degree();
return c;
}
// return (a - b)
public Polynomial minus(Polynomial b) {
Polynomial a = this;
Polynomial c = new Polynomial(0, Math.max(a.deg, b.deg));
for (int i = 0; i <= a.deg; i++)
c.coef[i] += a.coef[i];
for (int i = 0; i <= b.deg; i++)
c.coef[i] -= b.coef[i];
c.deg = c.degree();
return c;
}
// convert to string representation
public String toString() {
if (deg == 0)
return "" + coef[0];
if (deg == 1)
return coef[1] + "x + " + coef[0];
String s = coef[deg] + "x^" + deg;
for (int i = deg - 1; i >= 0; i--) {
if (coef[i] == 0)
continue;
else if (coef[i] > 0)
s = s + " + " + (coef[i]);
else if (coef[i] < 0)
s = s + " - " + (-coef[i]);
if (i == 1)
s = s + "x";
else if (i > 1)
s = s + "x^" + i;
}
return s;
}
// test client
public static void main(String[] args) throws IOException {
// Welcome message
System.out
.println("Welcome! The following program processes single-variable polynomials represented as linked lists.\n"
+ "Test Data will appear below, and is also saved to a text file (userSpecification.txt) \n"
+ "-------------------------------" + "\n");
String content = new String();
String name = new String();
File file = new File("polynomialTest.txt");
LinkedList<String> list = new LinkedList<String>();
try {
Scanner sc = new Scanner(new FileInputStream(file));
while (sc.hasNext()) {
name = sc.next();
content = sc.nextLine();
// ..just checking things as they come in.
System.out.println("name " + name + " content " + content);
list.add(content);
}
sc.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
System.out.println("\nProgram terminated Safely...");
}
Iterator<String> i = list.iterator();
while (i.hasNext()) {
System.out.println(name + i.next() + "\n");
}
private class Term {
int coef;
int expo;
Term next;
Term(int coef, int expo, Term n) {
this.coef = coef;
this.expo = expo;
this.next = n;
}
}
}
期望的输出:
P1 = 5X^3 – 4X + 8
P2 = 6X^5 -2X^2 +7X -4
P3 = 6X^5 +5X^3 -2X^2 +3X +4
P4 = 6X^5 -2X^2 +7X -4
立即输出:
Project #2
Welcome! The following program processes single-variable polynomials represented as linked lists.
-------------------------------
P1 = 3 5 1 -1 0 8
P2 = 5 6 2 -1 1 7 0 -4
p3 = p1 + p2
p4 = p3 - p1
[P1 = 3 5 1 -1 0 8, P2 = 5 6 2 -1 1 7 0 -4, p3 = p1 + p2, p4 = p3 - p1]
答案 0 :(得分:1)
您了解LinkedList
的概念及其在您的计划中的用途吗?从我从你的代码中收集的内容(如果你想要更多的答案,应该非常简洁并且只包含程序运行所必需的代码),你有这个Term
类,这是一个实现LinkedList
类中的Polynomial
,基本上只是持有Term
类并且没有做太多,而是自己处理所有代码。你应该做的是将Term
本身视为表示多项式表达式的节点集合。在main
函数中,您应该读取变量,将它们转换为Term
实例化,并将它们添加到根Term
实例化(每个多项式表达式一个)作为更多节点。当您将Term
s(现在是完全多项式表达式)一起添加时,您所要做的就是循环并将具有相同指数的所有那些加在一起。