I want to modify the below code to read the Polynomial Terms from a text file (vs. hard-coded values)

Furthermore, read data from text file in the format:

P1 = 3 5 1 -1 0 8

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

etc...

Name the values P(x) and input the remaining data... Any advice?

import java.util.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.*;

public class PolynomialTest
{
   private Monomial head;
   private double TOLERANCE = 0.00000001;

 /*****   the  Monomial (inner) class      ********************************/

   private class Monomial
   {
      private DecimalFormat precision = new DecimalFormat("#.####");
      private int exp;                 // coeff * x^exp
      private double coeff;
      private Monomial next;

      public Monomial(int exp, double coeff, Monomial next)
      {
         this.exp = exp;
         this.coeff = coeff;
         this.next = next;
      }
      public String toString()
      {
         String form = precision.format(Math.abs(coeff));

         if(exp == 0) return form ;
         else
         if(exp == 1) return form + "*x";
         else
         return form +"*x^" + exp;
      }
      public boolean equals(Monomial mono)
      {
         return exp == mono.exp && coeff == mono.coeff;
      }

   }

   public PolynomialTest()
   {
      head = null;
   }

 /**
   *  Adds a new term into the polynomial, assuming that the polynomial
   *  is sorted in order from smallest to largest exponent.
   */
   public void addTerm(int exp, double coeff)
   {
      if( Math.abs(coeff) < TOLERANCE ) return;

      if( head == null || exp < head.exp )
      {
         head = new Monomial(exp, coeff, head);
         return;
      }

      Monomial cur = head;
      Monomial prev = null;

      while( cur != null && exp > cur.exp)
      {
         prev = cur;
         cur = cur.next;
      }
      if( cur == null || exp != cur.exp )
			prev.next = new Monomial(exp, coeff, cur);
      else
      {
         cur.coeff += coeff;
         if( Math.abs(cur.coeff) < TOLERANCE )
           if(prev != null)
               prev.next = cur.next;
            else
               head = head.next;
      }
   }

   public String toString()
   {
      StringBuffer sb = new StringBuffer();

      for(Monomial tmp = head; tmp != null; tmp = tmp.next)
        if(tmp.coeff < 0 )
           sb.append(" - " + tmp.toString());
        else
           sb.append(" + " + tmp.toString());

      return sb.toString();
   }

 /**
   *  Adds two polynomials
   *  The method does not change the original polynomial.
   */
   public PolynomialTest add(PolynomialTest poly)
   {
      PolynomialTest res = clone();

      for(Monomial tmp = poly.head; tmp != null; tmp = tmp.next)
         res.addTerm(tmp.exp, tmp.coeff);

      return res;
   }

   public PolynomialTest clone()
   {
      PolynomialTest res = new PolynomialTest();

      for(Monomial tmp = head; tmp != null; tmp = tmp.next)
         res.addTerm(tmp.exp, tmp.coeff);

      return res;
   }

   public boolean equals(PolynomialTest poly)
   {
      Monomial tmp1 = head;
      Monomial tmp2 = poly.head;

      while(tmp1 != null && tmp2 != null)
      {
         if( !tmp1.equals(tmp2) ) return false;
         tmp1 = tmp1.next;
         tmp2 = tmp2.next;
      }
      return true;
   }

 /**
   *  Multiplies by a number
   *  The method does not change the original polynomial.
   */
   public PolynomialTest multiply(double num)
   {
      PolynomialTest res = clone();

      for(Monomial tmp = res.head; tmp != null; tmp = tmp.next)
         tmp.coeff *= num;

      return res;
   }

 /**
   *  Returns a new polynomial that is the derivative of this polynomial.
   */
   public PolynomialTest diff()
   {
      PolynomialTest res = new PolynomialTest();

      for(Monomial tmp = head; tmp != null; tmp = tmp.next)
      {
         if(tmp.exp != 0)
            res.addTerm(tmp.exp - 1, tmp.coeff * tmp.exp );
      }

      return res;
   }

 /**
   *  Computes the polynomial at x = value
   */
   public double eval(double value)
   {
      double res = 0;

      for(Monomial tmp = head; tmp != null; tmp = tmp.next)
      {
         res += tmp.coeff * Math.pow(value, tmp.exp);
      }

      return res;
   }
   

	
   public static void main(String[] args)
   
   
   {
      PolynomialTest first = new PolynomialTest();
      PolynomialTest second = new PolynomialTest();

      System.out.println( "first" );
      first.addTerm(1, 2.1);
      first.addTerm(4, 2);
      first.addTerm(3, 1);
      first.addTerm(0, 1.3);
      first.addTerm(4, 0.3);
      System.out.println( first );
      System.out.println( );

      System.out.println( "second" );
      second.addTerm(4, -2.3);
      second.addTerm(2, 1);
      second.addTerm(0, -1.3);
      second.addTerm(1, 0.3);
      System.out.println( second );
      System.out.println( );

      System.out.println( "compare first with second" );
      System.out.println( first.equals(second) );
      System.out.println( "compare first wih first" );
      System.out.println( first.equals(first) );
      System.out.println( );

      System.out.println( "add first and second" );
      PolynomialTest third = first.add(second);
      System.out.println( third );
      System.out.println( first );
      System.out.println( second );
      System.out.println( );

      System.out.println( "multiply first by 0.2" );
      PolynomialTest fourth = first.multiply(0.2);
      System.out.println( fourth );
      System.out.println( first );
      System.out.println( );

      System.out.println( "differentiate first" );
      PolynomialTest diff = first.diff();
      System.out.println( diff );
      System.out.println( first );
      System.out.println( );

      System.out.println( "eval first at x = 1.5" );
      System.out.println( first.eval(1.5) );
      System.out.println( );

      String content = new String();
		String name = new String();
		File file = new File("test.txt");
		LinkedList<String> list = new LinkedList<String>();
		
		
		try {
			Scanner sc = new Scanner(new FileInputStream(file));
				while (sc.hasNext()) {
				name = sc.next();
				content = sc.nextLine();	
				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");
			
		}
 
   }
}

ehm ... what are you having trouble with?
and no, I'm not going to read every single piece of code that is copied and pasted into this forum.

This article has been dead for over six months. Start a new discussion instead.