java - 从 Int 文本文件创建多项式。

标签 java linked-list polynomial-math

我正在读取 .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]

最佳答案

您了解 LinkedList 的概念及其在程序中的使用吗?根据我从您的代码中收集到的信息(如果您想要更多答案,该代码应该非常简洁,并且只包含程序运行绝对需要的代码),您有这个 Term 类,它是 LinkedList 的实现,在这个 Polynomial 类中,它基本上只是保存 Term 类,而不用它做太多事情,而是自己处理您的所有代码。您应该做的是将 Term 本身视为表示多项式表达式的节点的集合。在您的 main 函数中,您应该读取变量,将它们放入 Term 实例化中,并将它们添加到根 Term 实例化(每个多项式表达式一个)作为更多节点。当您将Term(现在是完整的多项式表达式)相加时,您所要做的就是循环遍历并将所有具有相同指数的项相加。

关于java - 从 Int 文本文件创建多项式。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237660/

相关文章:

java - Gradle 包装器 : command not found?

java - Windows 计算器按钮

c++ - 使用链接查找数组中的最大值

c - 从链表中删除节点无法正常工作

algorithm - 在 3 个未知变量上找到 N 多项式方程组的数值解的快速算法是什么?

algorithm - 使用 Horner 算法的高效多项式评估

java - 我们如何分割路径中的日期?

java - Scala jar : Error: Could not find or load main class

C++:为常量迭代器重载 list.end() 和 list.begin() 方法

java - Java中多项式x^16 + x^12 + x^5 + 1计算CCITT标准CRC