Play audio slide show -- Keyboard shortcut: 'x'  Back to lecture notes -- Keyboard shortcut: 'u'              Play sound for this slide -- Keyboard shortcut: 'y'  Lecture 12 - slide 10 : 30
 

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

// THE VIEW CLASS
public class DivModPresenter extends Applet {

   private DivModCalculator modelObject;
   private DivModListener listener;

   private Label title;
   private TextField dividend, divisor;
   private Label quotient,rest;

   public DivModPresenter(){
     modelObject = new DivModCalculator (this);
     listener = new DivModListener (modelObject, this);

     title = new Label ("Div Mod Calculator");
     dividend = new TextField ("0",5);
     divisor = new TextField ("0",5);
     quotient = new Label ("Kvotient:");
     rest = new Label ("Rest:") ;
    }

   public void init() {
     dividend.addActionListener (listener);
     divisor.addActionListener (listener);

     setLayout(new GridLayout(6,1));

     add(title);
     add(divisor);  add(dividend); 
     add(quotient); add(rest); 

     resize (200,200);
   }

   // Extract and return the dividend from the view.
   public int getDividend(){
     String strResult = dividend.getText();
     return Integer.parseInt(strResult);
   }

   // Extract and return the divisor from the view.
   public int getDivisor(){
     String strResult = divisor.getText();
     return Integer.parseInt(strResult);
   }

   // Show the quotient and the rest as text labels in the view.
   public void showResult(IntPair quotientRest){
     quotient.setText("Kvotient: " + Integer.toString(quotientRest.firstInt,10));
     rest.setText("Rest: " + Integer.toString(quotientRest.secondInt,10));
   }

  public static void main(String[] args){
     Frame f = new Frame("Color adjuster");
     f.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
             System.exit(0);
           }
       });
     DivModPresenter presenter =  new DivModPresenter();
     presenter.init();
     f.add("Center", presenter);
     f.pack();
     f.setSize(new Dimension(500,500));
     f.setVisible(true);
 } // end main

} // end DivModPresenter

class IntPair {
  public int firstInt, secondInt;

  public IntPair(int firstInt, int secondInt){
    this.firstInt = firstInt;
    this.secondInt = secondInt;
  }
}

// THE MODEL CLASS
class DivModCalculator {

  private DivModPresenter viewObject;

  IntPair inputMemory, outputMemory;

  public DivModCalculator(DivModPresenter viewObject) {
    this.viewObject = viewObject;
    inputMemory = null; outputMemory = null;
  }
   
  private IntPair divMod(int x, int y){
    // require x > 0 && y > 0 ;

    int rest = x;
    int quotient = 0;
    
    while (rest >= y) {
      // invariant rest + quotient * y = x;
      rest = rest - y;
      quotient = quotient + 1;
    }
    return (new IntPair(quotient,rest));
    // ensure  rest + quotient * y = x && rest < y && rest >= 0 ;
  } // end div

  public void doCalculate(int input1, int input2){
    inputMemory = new IntPair(input1, input2);
    if (input1 > 0 && input2 > 0)
      outputMemory = divMod(input1, input2);
    else
      outputMemory = new IntPair(-1, -1);

    // update the view - in an easy but primitive way:
    viewObject.showResult(outputMemory);
  }
} // end DivModCalculator

// THE CONTROLLER CLASS
class DivModListener implements ActionListener{

  private DivModCalculator modelObject;
  private DivModPresenter viewObject;

  public DivModListener(DivModCalculator modelObject, DivModPresenter viewObject){
    this.modelObject = modelObject;
    this.viewObject = viewObject;
  }

  public void actionPerformed(ActionEvent action){
    modelObject.doCalculate(viewObject.getDivisor(), viewObject.getDividend());
  }

} // end DivModListener