teaching machines

CS 245 Lecture 4 – Interfaces

Agenda

  • what ?s
  • virtual lab
  • Spanish verb conjugation
  • program this
  • a text editor

TODO

  • Keep at preassignment 1.
  • Finish lab 1.
  • Frolic.
  • No 1/4 sheet.

Program This

public interface Conjugator {
  public String getYo(String verb);
  public String getTu(String verb);
  public String getUsted(String verb);
  public String getNosotros(String verb);
}

Write a class ArConjugator, IrConjugator, or ErConjugator that implements the Conjugator interface and transforms the verb according to the rules exemplified in the conjugations of following regular verbs:

verb yo tu usted nosotros
hablar hablo hablas habla hablamos
comer como comes come comemos
vivir vivo vives vive vivimos

Code

Verb.java

package lecture04;

public class Verb {
  private String infinitive;
  private Conjugator conjugator;

  public Verb(String infinitive,
              Conjugator conjugator) {
    this.infinitive = infinitive;
    this.conjugator = conjugator;
  }

  public String getInfinitive() {
    return infinitive;
  }

  public Conjugator getConjugator() {
    return conjugator;
  }
}

Conjugator.java

package lecture04;

public interface Conjugator {
  public String getYo(String verb);
  public String getTu(String verb);
  public String getUsted(String verb);
  public String getNosotros(String verb);
}

ArErConjugator.java

package lecture04;

public class ArErConjugator implements Conjugator {
  public String getYo(String verb) {
    return verb.substring(0, verb.length() - 2) + "o";
  }

  public String getTu(String verb) {
    return verb.substring(0, verb.length() - 1) + "s";
  }

  public String getUsted(String verb) {
    return verb.substring(0, verb.length() - 1);
  }

  public String getNosotros(String verb) {
    return verb.substring(0, verb.length() - 1) + "mos";
  }
}

IrConjugator.java

package lecture04;

public class IrConjugator implements Conjugator {
  public String getYo(String verb) {
    return verb.substring(0, verb.length() - 2) + "o";
  }

  public String getTu(String verb) {
    return verb.substring(0, verb.length() - 2) + "es";
  }

  public String getUsted(String verb) {
    return verb.substring(0, verb.length() - 2) + "e";
  }

  public String getNosotros(String verb) {
    return verb.substring(0, verb.length() - 1) + "mos";
  }
}

Verber.java

package lecture04;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class Verber {
  private ArrayList<Verb> verbs;
  
  public Verber() {
    verbs = new ArrayList<Verb>();
  }
  
  public void add(Verb verb) {
    verbs.add(verb);
  }
  
  public void showTable(String path) throws FileNotFoundException {
    PrintWriter out = new PrintWriter(path);
    for (Verb verb : verbs) {
      Conjugator c = verb.getConjugator();
      out.printf("%s,%s,%s,%s,%s%n",
                        verb.getInfinitive(),
                        c.getYo(verb.getInfinitive()),
                        c.getTu(verb.getInfinitive()),
                        c.getUsted(verb.getInfinitive()),
                        c.getNosotros(verb.getInfinitive()));
    }
    out.close();
  }
}

Main.java

package lecture04;

import java.io.FileNotFoundException;

public class Main {
  public static void main(String[] args) throws FileNotFoundException {
    Verber verber = new Verber();
    
    Conjugator arErConjugator = new ArErConjugator();
    Conjugator irConjugator = new IrConjugator();

    verber.add(new Verb("abrir", irConjugator));
    verber.add(new Verb("aprender", arErConjugator));
    verber.add(new Verb("bailar", arErConjugator));
    verber.add(new Verb("caminar", arErConjugator));
    verber.add(new Verb("cantar", arErConjugator));
    verber.add(new Verb("comprender", arErConjugator));
    verber.add(new Verb("escribir", irConjugator));
    verber.add(new Verb("leer", arErConjugator));
    verber.add(new Verb("recibir", irConjugator));
    
    verber.showTable("/Users/johnch/Desktop/spanish.csv");
  }
}

TextEater.java

package lecture04;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;

public class TextEater {
  public static void main(String[] args) {
    final JFrame frame = new JFrame("TextEater");

    JMenuBar menuBar = new JMenuBar();
    frame.setJMenuBar(menuBar);

    JMenu fileMenu = new JMenu("File");
    menuBar.add(fileMenu);

    JMenuItem openMenuItem = new JMenuItem("Open");
    fileMenu.add(openMenuItem);

    final JTextArea textArea = new JTextArea();
    frame.add(textArea, BorderLayout.CENTER);

    textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 18));

    openMenuItem.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent arg0) {
        try {
          JFileChooser fileChooser = new JFileChooser();
          int status = fileChooser.showOpenDialog(frame);
          if (status == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            Scanner in = new Scanner(selectedFile);
            while (in.hasNextLine()) {
              textArea.append(in.nextLine() + "\n");
            }
            in.close();
          }
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
    });

    frame.setSize(512, 512);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

Haiku

A bleak dawn ahead
My code does nothing but wait
Execution comes

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *