2012-02-11 10 views
1

私は多項式を作成するために.txtファイルを読みます。私は多項式を実際に印刷するのに問題があります(リンクされたリストに入れられた後)。私は、リンクリストと多項式法 'を結ぶ' について行くのか本当にわからないんだけど...Intテキストファイルから多項式を作成する。

テキストファイル:

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

P1 = 5X^3 - X + 8でなければなりません。最初の式が正しくないか、入力データが正しくありません。 – eternaln00b

+0

多項式が実際に表示されるようになっているので(期待される出力のように)、数についてあまり心配していません。良いキャッチしかし、私はそれを変更します! – tommy1370

答えて

1

LinkedListの概念とそのプログラムでの使用を理解していますか?私があなたのコードから集めたもの(より多くの答えが必要な場合は、プログラムを実行するために必要なコードのみを含む)はTermクラスであり、これはLinkedListの実装です。このPolynomialクラスの中では、基本的にはTermクラスを保持していて、それほど多くはありません。代わりに、すべてのコードを単独で処理しています。あなたがしなければならないのは、Termそのものを多項式を表すノードの集まりと考えることです。 main関数では、変数を読み込み、Termのインスタンス化にして、より多くのノードとしてルートTermインスタンス化(多項式ごとに1つ)に追加する必要があります。 Term(今度は完全な多項式)を一緒に追加するときは、同じ指数を持つすべてのものを循環して追加するだけです。

関連する問題