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

时间:2012-02-11 03:49:58

标签: 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]

1 个答案:

答案 0 :(得分:1)

您了解LinkedList的概念及其在您的计划中的用途吗?从我从你的代码中收集的内容(如果你想要更多的答案,应该非常简洁并且只包含程序运行所必需的代码),你有这个Term类,这是一个实现LinkedList类中的Polynomial,基本上只是持有Term类并且没有做太多,而是自己处理所有代码。你应该做的是将Term本身视为表示多项式表达式的节点集合。在main函数中,您应该读取变量,将它们转换为Term实例化,并将它们添加到根Term实例化(每个多项式表达式一个)作为更多节点。当您将Term s(现在是完全多项式表达式)一起添加时,您所要做的就是循环并将具有相同指数的所有那些加在一起。