Tarea 8 - observación

Tienen un ejemplo de ArrayList aquí, un ejemplo de TreeMap aquí y un ejemplo de cómo invocar al constructor del tipo base aquí.
La lectura de una cantidad arbitraria de instrucciones la pueden hacer de una forma similar a la siguiente:

   class RutinasInterprete { 
      public static ArrayList<Instruccion> preprocesa(InputStream entrada) { 
         //...
         var sc = new Scanner(entrada); 
         for (int i = 0; sc.hasNext( ); ++i) {
            String comando = sc.next( ); 
            //... recuerden usar .equals(cadena) para comparar el comando, no ==
         }
         //...
      }
   }
Desafortunadamente OutputStream no tiene las funciones print, println ni printf (System.out hereda de OutputStream pero realmente es un PrintStream). Sin embargo, pueden construir un PrintStream a partir de un OutputStream fácilmente:
   void imprime(OutputStream salida, int valor) {
      new PrintStream(salida).println(valor);      // similar a lo que conviene hacer dentro de InstruccionImpresion
   }
Al usar la versión corta de Main, el lenguaje importa automáticamente varios paquetes. Sin embargo, en esta tarea les sugiero que no usen la versión corta de Main porque pueden tener multitud de problemas por culpa de las clases que ahora se vuelven anidadas. Eso significa que es buena idea importar manualmente algunos paquetes:
   import java.io.*;    // para poder usar System.in y System.out sin tener que anteponer java.io (por ejemplo, java.io.System.in)
   import java.util.*;  // para poder usar ArrayList y TreeMap sin tener que anteponer java.util (por ejemplo, java.util.ArrayList)
Por cierto, pueden convertir enteros a cadenas con algo como:
   String s = String.valueOf(123);    // convirtiendo entero a cadena 
   System.out.print(s + "hola");      // concatenando con otra cadena para obtener "123hola"