当前位置: 首页 > 面试题库 >

单变量多项式(来自文本文件)

洪俊拔
2023-03-14
问题内容

我想修改以下代码以从文本文件中读取节点(相对于硬编码值)

此外,以以下格式从文本文件中读取数据:

P1 = 3 5 1 -1 0 8

P2 = 5 6 2 -1 1 7 0 -4

等等…

命名值P(x)并输入剩余数据。有什么建议吗?

import java.io.DataInputStream;
import java.util.LinkedList;
import java.util.ListIterator;

// A term contains the coefficient and the exponent of x.
class Term {
public Term(int c, int d) {
    coeff = c;
    degree = d;
}

public Term multiply(Term other) {
    return new Term(coeff * other.coeff, degree + other.degree);
}

public void add(int c) {
    coeff += c;
}

public void sub(int c) {
    coeff -= c;
}

public int getCoeff() {
    return coeff;
}

public int getDegree() {
    return degree;
}

private int coeff;
private int degree;
}

// A polynomial made up of terms.
class Polynomial {
// Construct a Polynomial object.
public Polynomial() {
    terms = new LinkedList();
}

public Polynomial add(Polynomial p) {
    Polynomial r = new Polynomial();
    ListIterator iterator = terms.listIterator();
    while (iterator.hasNext()) {
        r.add((Term) iterator.next());
    }
    ListIterator pIterator = p.terms.listIterator();
    while (pIterator.hasNext()) {
        r.add((Term) pIterator.next());
    }
    return r;
}

public Polynomial sub(Polynomial p) {
    Polynomial r = new Polynomial();
    ListIterator iterator = terms.listIterator();
    while (iterator.hasNext()) {
        r.sub((Term) iterator.next());
    }
    ListIterator pIterator = p.terms.listIterator();
    while (pIterator.hasNext()) {
        r.sub((Term) pIterator.next());
    }
    return r;
}

public Polynomial multiply(Polynomial p) {
    Polynomial r = new Polynomial();
    ListIterator iterator = terms.listIterator();
    while (iterator.hasNext()) {
        ListIterator pIterator = p.terms.listIterator();
        Term t1 = (Term) iterator.next();
        while (pIterator.hasNext()) {
            Term t2 = (Term) pIterator.next();
            r.add(t1.multiply(t2));
        }
    }
    return r;
}

// Adds a coefficient and degree as a new Term.

public void addTerm(int c, int d) {
    add(new Term(c, d));
}

// Adds a term

public void add(Term t) {
    int c = t.getCoeff();
    int d = t.getDegree();

    ListIterator iterator = terms.listIterator();
    while (iterator.hasNext()) {
        Term current = (Term) iterator.next();
        if (d == current.getDegree()) {
            if (c == -current.getCoeff())
                iterator.remove();
            else
                current.add(c);
            return;
        } else if (d < current.getDegree()) {
            iterator.previous();
            iterator.add(t);
            return;
        }
    }
    iterator.add(t);
}

public void sub(Term t) {
    int c = t.getCoeff();
    int d = t.getDegree();

    ListIterator iterator = terms.listIterator();
    while (iterator.hasNext()) {
        Term current = (Term) iterator.next();
        if (d == current.getDegree()) {
            if (c == current.getCoeff())
                iterator.remove();
            else
                current.add(-c);
            return;
        } else if (d < current.getDegree()) {
            iterator.previous();
             iterator.add(t);
            current.add(-c);
            return;
        }
    }
    iterator.add(t);

}

// Prints the polynomial.
public void print() {
    ListIterator iterator = terms.listIterator();

    while (iterator.hasNext()) {
        Term current = (Term) iterator.next();
        if (current.getCoeff() != 0) {
            if ((current.getCoeff() < 0) || (!(current.getDegree() != 0))) {
                System.out.print(" ");
            }

            else {
                System.out.print(" + ");
            }
            System.out.print(current.getCoeff());

            if (current.getDegree() > 0) {
                System.out.print("x");
                if (current.getDegree() > 1)
                    System.out.print("^" + current.getDegree());
            }
        }
    }
    System.out.println();
}

@SuppressWarnings("deprecation")
public char getChar() {
    char val = ' ';
    String buffer = "";

    DataInputStream ds = new DataInputStream(System.in);
    try {
        buffer = ds.readLine();
        val = buffer.charAt(0);
    } catch (Exception e) {
    }

    return (val);
}

public char enterNext() {
    System.out.println("Enter next Polynomial? ");
    char ans = this.getChar();
    switch (ans) {
    case 'n':
    case 'N':
        System.out.println("All Done.");
        System.exit(0);
        break;
    case 'y':
    case 'Y':
        System.out.println("Enter next one, please!");
    }
    return ans;
}

private LinkedList terms;
}

// A test program for Polynomial and Term classes.

public class RPC {
private static char ans = 'y';

public static void main(String[] args) {
    Polynomial p = new Polynomial();
    do
     {
    p.addTerm(10, 0);
    p.addTerm(-1, 1);
    p.addTerm(9, 7);
    p.addTerm(5, 10);
    System.out.print("f(x) = ");
    p.print();
    System.out.println();
    Polynomial q = new Polynomial();
     do
    {
    q.addTerm(1, 0);
    q.addTerm(-11, 1);
    q.addTerm(19, 7);
    q.addTerm(15, 10);
    System.out.print("q(x) = ");
    q.print();
     p.enterNext();
    }
     while (!(ans != 'y') | !(ans != 'Y'));
    System.out.println();

    Polynomial a = p.add(q);
    System.out.print("f(x) + q(x) = ");
    a.print();
    Polynomial s = p.sub(p);
    s.print();
    Polynomial m = p.multiply(q);
    System.out.print("f(x) * q(x) = ");
    m.print();
    System.exit(0);

} while (ans != 1000);
}
}

问题答案:

除非您的数据已经是二进制格式,否则我不会使用DataInputStream。以下示例BufferedReader用于撰写org.jscience.mathematics.function.Polynomial

请注意,为方便应用 Horner方案
,最高阶系数是第一个,如本示例所示。

1 2 3 4
4 3 2 1



系数:1 2 3 4
多项式:[1]x³+ [2]x²+ [3] x + [4]
系数:4 3 2 1
多项式:[4]x³+ [3]x²+ [2] x + [1]

码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.jscience.mathematics.function.Polynomial;
import org.jscience.mathematics.function.Term;
import org.jscience.mathematics.function.Variable;
import org.jscience.mathematics.number.Integer64;

/** @see http://stackoverflow.com/questions/8276150 */
public class ReadPoly {

    public static void main(String[] args) throws IOException {
        BufferedReader r = new BufferedReader(new FileReader("test.txt"));
        String s;
        while ((s = r.readLine()) != null) {
            System.out.println("Coefficient: " + s);
            Polynomial<Integer64> p = create(s.split(" "));
            System.out.println("Polynomial:  " + p);
        }
    }

    public static Polynomial<Integer64> create(String... a) {
        Variable<Integer64> x = new Variable.Local<Integer64>("x");
        Polynomial<Integer64> px = Polynomial.valueOf(Integer64.ZERO, x);
        for (int i = 0, e = a.length - 1; i < a.length; i++, e--) {
            px = px.plus(Polynomial.valueOf(
                Integer64.valueOf(a[i]), Term.valueOf(x, e)));
        }
        return px;
    }
}


 类似资料:
  • 我想从1中得到一个变量。将js文件复制到另一个。js文件。现在我有主要的问题。js 我有平衡感。js 我得到了错误 常量余额=需要(“./余额”); ReferenceError:未定义require 我通过windows PowerShell运行此代码,节点版本为:v14。10.1

  • 问题内容: 因此,我有两个不同的文件,如下所示: file1.py file2.py 但是我似乎无法让file2识别来自file1的变量,即使它已经导入到file1中也是如此。如果可以某种方式实现,那将非常有帮助。 问题答案: 导入在使得全球(即,模块级)的约束名字提供给下面的代码-唯一的此类名称是。它并 没有 做反向:在定义的名称并不提供给代码的时候进口。即使您以正确的方式(如@nate正确建议

  • 问题内容: 我想知道如何将PHP变量保存到txt文件,然后再次检索它们。 例: 有一个输入框,提交后,在输入框中写入的内容将保存到文本文件中。稍后,需要将结果作为变量返回。因此,可以说变量是$ text,我需要将其保存到文本文件中并能够再次取回它。 问题答案: 这应该可以执行您想要的操作,但是如果没有更多上下文,我无法确定。 将$ text写入文件: 再次检索它:

  • 问题内容: 我怎样才能做到这一点? 它将替换为文本。但是我想用变量的内容替换它。 我尝试过 它也不起作用。 问题答案: 您需要使用双引号: 您的单引号可防止将shell变量替换为其内容。

  • 我在fxml文件中有一个JavaFX GUI,定义了它的控制器类。我在该GUI中有两个我想要的文本项,一个与一个变量绑定,其值在用户重新加载屏幕之前不会更改,另一个我认为需要是StringProperty,因为它显示了我的TableView中一列的运行总数。由于它们是什么,我正在尝试使用Label而不是TextField作为它们的显示控件。 我喜欢塞巴斯蒂安对这个问题的回答: 在JavaFx标签中

  • 我希望第一列是arraylist的名称(e1,或e2,或e3),我希望第二列有它的值(一个int),在第n个索引中。 我该怎么做呢? 你想进一步澄清我的意思,请不要害怕离开一个下午。 所以我设法使程序几乎正常工作--我不能使用ArrayLists的原始结构,因为所有变量都必须在编译期间声明--之后不能声明。我决定使用一个hashmap,键具有第一个值,第二个值的arraylist位于第N个位置: