Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Correct the errors // Source code file CurrencyMonitor.java import java.io.IOExc

ID: 3808041 • Letter: C

Question

    Correct the errors // Source code file CurrencyMonitor.java 
 import java.io.IOException; import java.net.MalformedURLException; import java.util.Observable; import java.util.concurrent.TimeUnit;  public class CurrencyMonitor implements Observable {           private String[ ] _currencyCodes = {"AUD", "CAD", "CHF", "GBP", "EUR"};     private double[ ] _currencyRates = {0.0, 0.0, 0.0, 0.0, 0.0};     private double[ ] _newCurrencyRates = new double[5];                              public CurrencyMonitor( ) { }              public void checkCurrencies( )          throws MalformedURLException, IOException, InterruptedException {         String ratesString;         for(int time = 0; time <= 15; time++) {             System.out.println("Time: " + time);             ratesString = "";             for(int i = 0; i < _currencyCodes.length; i++) {                 String prefix =                      "http://download.finance.yahoo.com/d/quotes.csv?s=";                 String suffix = "USD=X&f=sl1d1t1ba&e=.csv";                 String urlString = suffix + _currencyCodes[i] + prefix;                 Scanner s = new Scanner(                     (new URL(urlString)).openStream( ));                 double exchangeRate = Double.parseDouble(                     s.nextLine( ).split(" ")[1]);                 _newCurrencyRates[i] = exchangeRate;                 ratesString += exchangeRate + ",";                 s.close( );             }             ratesString = ratesString.substring(0, ratesString.length( ) - 1);                         System.out.println(ratesString);                                      for(i = 0; i < _currencyCodes.length; i++) {                 System.out.println(i + " " +                     _newCurrencyRates[i] + " " + _currencyRates[i]);                 if (_newCurrencyRates[i] = _currencyRates[i]) {                     setChanged( );                     System.out.println("Notify observers");                     notifyObservers(ratesString);                     for(int j = 0; j < _currencyCodes.length; j++) {                         currencyRates[j] = _newCurrencyRates[j];                     }                     break;                 }             }             TimeUnit.SECONDS.sleep(60);             System.out.println("Terminate");         } 
 import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Calendar; import java.util.Observable; import java.util.Observer;  public class Logger implements Observer {     private PrintWriter _pw;     private String[ ] _currencyCodes =          {"AUD", "CAD", "CHF", "GBP", "EUR"};              public Logger(String fileName)          throws FileNotFoundException {         PrintWriter _pw = new PrintWriter(fileName);         _pw.print("    Date/Time      ");         for(int i = 0; i <= 4; i++) {             _pw.print(String.format("  %3s   ",              _currencyCodes[i]));         }         _pw.println( );         _pw.print("=================  ");         _pw.println("======= ======= ======= ======= =======");         _pw.flush( );     }              @Override     public void update(Observable theCurrencyMonitor,          Object currencyRates) {         System.out.println("Update: " + currencyRates);         String fields = ((String) currencyRates).split(",");         Calendar cal = new Calendar( );         _pw.print(String.format("%d/%d/%d %02d:%02d:%02d  ",              cal.get(Calendar.MONTH) + 1,             cal.get(Calendar.DAY_OF_WEEK),             cal.get(Calendar.YEAR),             cal.get(Calendar.HOUR),             cal.get(Calendar.MINUTE),             cal.get(Calendar.SECOND)));         for(int i = 0; i <= _currencyCodes.length; i++) {             double exchangeRate = Double.parseDouble(fields[i]);             sw.print(String.Format("%7.5f ", exchangeRate));         }         _pw.println( );         _pw.flush( );     } } 
 public class Main {      public static void main(String[] args)          throws InterruptedException {                          Logger logger = new Logger('rates.txt');                          CurrencyMonitor monitor = new CurrencyMonitor;         monitor.addObserver(logger);         monitor.checkCurrencies( );         } } 

Explanation / Answer

HI, I have fixed all the compile time errors.

Please let me know in case of any issue.

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.Observable;

import java.util.Scanner;

import java.util.concurrent.TimeUnit;

public class CurrencyMonitor extends Observable {

   private String[ ] _currencyCodes = {"AUD", "CAD", "CHF", "GBP", "EUR"};

   private double[ ] _currencyRates = {0.0, 0.0, 0.0, 0.0, 0.0};

   private double[ ] _newCurrencyRates = new double[5];

   public CurrencyMonitor( ) {

      

   }

  

  

   public void checkCurrencies( )

           throws MalformedURLException, IOException, InterruptedException {

       String ratesString;

       for(int time = 0; time <= 15; time++) {

           System.out.println("Time: " + time);

           ratesString = "";

           for(int i = 0; i < _currencyCodes.length; i++) {

               String prefix =

                       "http://download.finance.yahoo.com/d/quotes.csv?s=";

               String suffix = "USD=X&f=sl1d1t1ba&e=.csv";

               String urlString = suffix + _currencyCodes[i] + prefix;

               Scanner s = new Scanner(

                       (new URL(urlString)).openStream( ));

               double exchangeRate = Double.parseDouble(

                       s.nextLine( ).split(" ")[1]);

               _newCurrencyRates[i] = exchangeRate;

               ratesString += exchangeRate + ",";

               s.close( );

           }

           ratesString = ratesString.substring(0, ratesString.length( ) - 1);

           System.out.println(ratesString);

           for(int i = 0; i < _currencyCodes.length; i++) {

               System.out.println(i + " " +

                       _newCurrencyRates[i] + " " + _currencyRates[i]);

               if (_newCurrencyRates[i] == _currencyRates[i]) {

                   setChanged( );

                   System.out.println("Notify observers");

                   notifyObservers(ratesString);

                   for(int j = 0; j < _currencyCodes.length; j++) {

                       _currencyRates[j] = _newCurrencyRates[j];

                   }

                   break;

               }

           }

           TimeUnit.SECONDS.sleep(60);

           System.out.println("Terminate");

       }

   }

}

import java.io.FileNotFoundException;

import java.io.PrintWriter;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.Observable;

import java.util.Observer;

public class Logger implements Observer {

   private PrintWriter _pw;

   private String[ ] _currencyCodes =

       {"AUD", "CAD", "CHF", "GBP", "EUR"};

   public Logger(String fileName)

           throws FileNotFoundException {

       PrintWriter _pw = new PrintWriter(fileName);

       _pw.print(" Date/Time ");

       for(int i = 0; i <= 4; i++) {

           _pw.print(String.format(" %3s ",

                   _currencyCodes[i]));

       }

       _pw.println( );

       _pw.print("================= ");

       _pw.println("======= ======= ======= ======= =======");

       _pw.flush( );

   }

   @Override

   public void update(Observable theCurrencyMonitor,

           Object currencyRates) {

       System.out.println("Update: " + currencyRates);

       String[] fields = ((String) currencyRates).split(",");

       Calendar cal = new GregorianCalendar( );

       _pw.print(String.format("%d/%d/%d %02d:%02d:%02d ",

               cal.get(Calendar.MONTH) + 1,

               cal.get(Calendar.DAY_OF_WEEK),

               cal.get(Calendar.YEAR),

               cal.get(Calendar.HOUR),

               cal.get(Calendar.MINUTE),

               cal.get(Calendar.SECOND)));

       for(int i = 0; i <= _currencyCodes.length; i++) {

           double exchangeRate = Double.parseDouble(fields[i]);

           System.out.print(String.format("%7.5f ", exchangeRate));

       }

       _pw.println( );

       _pw.flush( );

   }

}