You are on page 1of 13

UNIVERSIDAD JOSÉ ANTONIO PÁEZ

FACULTAD DE INGENIERÍA

Cátedra de Programación III
Semestre 2-2017

Práctica Guiada N°1 – Sintaxis del lenguaje de programación JAVA
Competencias a Adquirir:

1. Maneja el entorno de trabajo NetBeans 8.2, con el propósito de crear, ejecutar y depurar aplicaciones del tipo Java
Main.
2. Utiliza las Instrucciones de E/S y las primeras sentencias básicas del lenguaje Java (lectura por teclado y salida por
pantalla, declaración de variables y/o constantes, operadores del tipo aritméticos, concatenación y asignación), con
el fin de crear aplicaciones sencillas.

Actividades propuestas:

 Construcción de un proyecto de nombre EntornoJava1, Pasos a seguir:
a) Seleccione el botón de NUEVO PROYECTO o entre al menú File->New Project. También
observe que cuenta con la tecla abreviada Ctrl+Mayús+N, para realizar la misma actividad.
b) En la ventana de creación del proyecto observe que esta seleccionada la categoría JAVA y que
el proyecto es del tipo JAVA APPLICATION. Pulse siguiente (NEXT).
c) Coloque por nombre del proyecto (Project Name) EntornoJava, verifique siempre la opción de
Project Location, con el fin de ubicar donde queda guardado dicho proyecto, en caso de
querer cambiar la ubicación selecciones el botón Browse. Finalmente, note que en la opción
Create Main Class, aparece como nombre entornojava1.EntornoJava1.
Al pulsar Enter, automáticamente se crea un proyecto de nombre
EntornoJava, el cual posee un paquete de nombre entornojava
y en él está la clase EntornoJava.Java. Ver ventana de Project a
mano izquierda del editor.

Como puede observar, se generó un archivo fuente en donde nos muestra el código inicial de la clase
EntornoJava1, el cual se encuentra incluido en el paquete entornojava1 y dentro de la clase
aparece el método principal (main), en donde escribiremos todo el código a realizar.

 Codificación de la aplicación EntornoJava1

Dentro del método main, realice las siguientes actividades:

a) Ingrese un Mensaje de apertura. En la línea 19, coloque la impresión de una línea sin salto de
línea que diga, Bienvenido a la aplicación de prueba Declaración de Variables y Constantes.
Recuerde que la instrucción de salida por pantalla en Java, emplea la clase System, que está
contenido en el paquete java.lang y dispone de tres variables estática a implementar in

Programación III – Práctica Guiada N°1 Página 1 de 13
Profesor Hugo Hernández

que muestra un mensaje por pantalla sin o con salto de línea respectivamente. que debe ser parte del mensaje a mostrar. Programación III – Práctica Guiada N°1 Página 2 de 13 Profesor Hugo Hernández . La variable out cuenta con los métodos print y println. de la siguiente forma Bienvenido a la aplicación de prueba\nDeclaración de Variables y Constantes y volvemos a ejecutar el programa Observe que el mensaje aparece en dos líneas aparte. esto fue gracias a la secuencia de escape \n (Salto de línea). Todo esto sin salto de línea. Secuencia de escape Descripción \n Insertar un Salto de línea \t Insertar un Tabulador \’ Insertar comilla simple (empleado para constantes tipo char) \” Insertar comilla doble (empleado para constantes tipo String) \\ Insertar barra invertida (empleado para la secuencia de escape) \r Insertar retorno del carro (Solo funciona en modo administrador) \b Retroceder un espacio (Solo funciona en modo administrador) c) Ahora dividamos el mensaje en dos líneas empleando salto de líneas y ejecutamos nuevamente. Note que como se esperaba. b) Modifique el mensaje colocado en la línea 19. A continuación se muestra la lista completa de las secuencias de escape disponibles en java. out (salida) y err (mensaje de error). cuando se necesita utilizar un carácter. de control o que es empleado por el lenguaje. aparece el mensaje escrito en una sola línea e inmediatamente después aparece el mensaje de que la construcción fue exitosa. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA (entrada). Las secuencias de escape son caracteres constantes muy útiles. Ejecute el programa (Run->Run Project) y observe los resultados obtenidos.

ya que Java interpreta predeterminadamente los datos reales del tipo double. 2 byte ‘\0’ 65535(\uffff) entre comillas simples. Ahora. aparece en una línea aparte. siempre para definir una constante. altura y unidad. ** No es requerido la letra al final. Programación III – Práctica Guiada N°1 Página 3 de 13 Profesor Hugo Hernández .0D** 16 dígitos false(0) o Valor lógico boolean 1 byte False true(1) * Se necesita siempre colocar la letra al final. para posteriormente establecer el tipo de dato a guardar. su representación literal (9. Antes de indicar la forma de declarar una constante. al momento de establecer el valor a poseer.0F* 6 dígitos Precisión de Real de precisión doble double 8 byte 0. d) Declarar constantes. byte -128 al 127 1 byte Entero de 8bits con signo 0 -32768 al Entero de 16bits con signo short 2 byte 0 32767 int -2 al 231-1 31 4 byte Entero de 32bits con signo 0 long -263 al 263-1 8 byte Entero de 64bits con signo 0L* Precisión de Real de precisión simple float 4 byte 0. se coloca primeramente la palabra reservada final. Si se necesita manejar una cadena de caracteres en Java. la cual tiene un comportamiento especial. para que el código se muestre de la siguiente manera: Observe que se define la gravedad como un dato tipo float. Vamos a crear las contantes: gravedad. Tamaño Valor Identificador Descripción Valor Memoria Predeterminado Char 0(\u0000) al Un carácter Unicode (16bits). y es por eso. esto hace que sea requerido. borre la F del valor e interprete que sucede. luego el identificador a poseer y finalmente el valor a contener. Recuerde que en Java. se cuenta con la clase String. que más adelante iremos explicando. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Note que de esta manera no se requiere el uso de la secuencia de escape del salto de línea ya que el método println.81F). para su representación como una constante literal. no solo imprime el mensaje sino que después salta la línea. como es el hecho de que no se necesita instanciar un objeto de este tipo para trabajar con el mismo. que ahora el mensaje de construcción exitosa. hay que recordar los diferentes tipos de datos primitivos que cuenta Java.

81F. como lo hemos hecho al momento de hacer los mensajes de impresión previos. que son los que ocurren cuando se está escribiendo el código del programa y algo no coincide con la sintaxis que fue diseñado el lenguaje. No fue realizado de manera robusta. será. Ahora. existe la posibilidad de cometer tres tipos de errores: a) Errores de compilación. esto es debido a que dicha conversión no implica perdida de datos o precisión en el valor. observemos el hecho que al darle valor a la constante unidad. ya que es el típico error que se comete. Recuerde que al elaborar una aplicación en cualquier idioma de programación. es el más difícil de solventar. el valor que contendrá se coloca encerrado entre comillas simples. Para realizar la conversión. en ese caso se tiene que hacer casting al tipo de dato respectivo. esto es debido ya que no se puede realizar la conversión del valor a un dato a float o dicho de otra forma. pero para el caso de las constantes tipo String. no se puede promover dicho valor a un dato de ese tipo. modifiquemos la constante gravedad a un dato del tipo double y coloquemos como valor a almacenar. se puede realizar un casting a un valor tipo float. Esto es debido a que una constante literal del tipo char emplea este símbolo. esto se logra colocando entre paréntesis. para escribir una instrucción o sentencia. cuando existe la posibilidad de pérdida de precisión. b) Error de ejecución. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Ocurre un error de sintaxis. c) Errores lógicos. cuando no se sabe realmente que debe hacer el programa para que su ejecución sea exitosa. el cual ocurre cuando se ejecuta el programa y de alguna manera no se considera alguna posibilidad donde los cálculos dan un error. 9. ¿Qué ocurre un error de sintaxis nuevamente? No ocurre ningún error de sintaxis. sin escribir su valor de manera literal. Programación III – Práctica Guiada N°1 Página 4 de 13 Profesor Hugo Hernández . En la siguiente imagen se muestran las promociones automáticas en Java. se utiliza las comillas dobles. ejemplo una división por cero. el tipo de dato a convertir. Ahora.

cuando se escribe una expresión. simplemente se está dando un valor de iniciación. siempre y cuando. Siempre intentemos que el nombre de la variable sea muy representativo al contenido que se quiere almacenar en dicha variable. Suma** y Resta * Si tanto el dividendo como el divisor son enteros. se emplean los paréntesis. Como regla vamos a identificar las variables siempre. comenzando con una letra minúscula y del segundo carácter en adelante. el resultado de la división será el cociente del mismo ** Este símbolo también es el encargado de concatenar dos cadenas de caracteres (operador de concatenación). de no especificarse algún valor. /. se pueden declarar en una sola línea. Java establece como valores iniciales los predeterminados. así como sus respectivos operadores aritméticos. % Multiplicación. separemos una de otra por comas. Para definir una variable. si se quiere cambiar el orden de evaluación. Operadores Descripción *. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA e) Definición de las variables. A continuación se muestran los operadores aritméticos en orden de evaluación con asociatividad de izquierda a derecha. se realiza de forma similar a una constante pero con la diferencia que no se coloca la palabra reservada final. el método es: sqrt(valorCalcular:TipoNumerico):double Recuerde que existe un orden de evaluación. se puede colocar cualquier combinación de letras y números o el carácter especial piso( _ ). Además. Para el caso de la raíz cuadrada. Programación III – Práctica Guiada N°1 Página 5 de 13 Profesor Hugo Hernández . División* y Residuo de la División +. h = altura (m) y g = gravedad (m/s2) 𝑔 𝑣 = 2√2 ∗ 𝑔 ∗ ℎ dónde: v = velocidad (m/s2) En Java. . Por otro lado. si se le iguala algún valor en su definición. todas las funciones y constantes matemáticas se encuentran como datos o métodos estáticos en la clase Math. f) Determinación e impresión del tiempo de caída libre de un objeto. desde una altura dada y la velocidad de choque que tendrá contra el piso. Según física las ecuaciones a implementar son: 2 2∗ℎ 𝑡=√ dónde: t = tiempo (s). si las variables son del mismo tipo. como datos tipo float. Además. según el tipo de dato a manejar. tiempo y velocidad.

al cálculo tanto del tiempo y como de la velocidad (ver Línea 26 y 27) Programación III – Práctica Guiada N°1 Página 6 de 13 Profesor Hugo Hernández . Cuando se concatena datos tipo String. para luego unirlo a la constante unidad(m). luego el valor del tiempo y finalmente el String con la unidad de tiempo a poseer el resultado. esto se debe a que el compilador interpreta la operación altura + unidad. otra forma que nos permitiría obtener 4m.En la línea 28. se está concatenando el valor de la constante altura (4) con un espacio vacío. Esta variable va a recibir su valor con el empleo del teclado. lo que implica que en vez de ver 4m. el caso de los datos tipo char. pudiese ser empleando de la clase String. si el enunciado al programa a realizar fuese el siguiente: Elabore una aplicación de Java Main. en el caso de no colocar la cadena vacío “”. como ocurre con la constante unidad. el resultado que obtendríamos sería 113. que es del tipo char. pero si alguna de ellas no es un dato String. en la línea 24. Java convierte el dato a String o se ejecuta el método toString. vamos a definir la variable nroPiso.valueOf(unidad) + … g) Proceso de lectura de datos. es decir: altura + String. el método valueOf(). se debe realizar como un paso previo. Ahora. tiempo y velocidad como datos del tipo float. Hasta ahora el programa no tiene sentido. Sin embargo. como la suma de los dos datos tipo int (altura[4] y unidad[‘m’ = 109]) y ese resultado es convertido posteriormente a String. De no hacerse esto como paso al momento de trabajar la definición de la constante gravedad. que evalúe el tiempo de caída libre de un objeto desde el piso N de un edificio. La lectura de este valor. como un dato tipo int. en caso de ser un objeto. ya que el usuario tiene la potestad de establecer el piso que quiera usar. sino lo interpreta como un dato tipo int. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA En la imagen anterior. observe los siguientes detalles en el código y los resultados dados: 1.Por definir las variables. nos ocurre un error de sintaxis 2. siguiendo un mensaje. con el fin de determinar: el tiempo que tarda en llegar al suelo y la velocidad de choque contra él. ¿Por qué este resultado?. se debe realizar casting a dicho tipo. ya que la raíz cuadrada devuelve un dato del tipo double. la maquina une la información de ambas cadenas de caracteres. la maquina no lo convierte a String. ya que siempre nos dar los mismos resultados si se ejecutar el programa. Ahora. Se conoce que cada piso tiene una altura de 4m.

Por otro lado. si se quiere trabajar con un objeto de la clase BufferedReader. Recuerde que String es un clase y lo que implica que el proceso de conversión no se puede realizarse con un casting. clase Integer. en este caso se requiere el uso de ciclos. en el cual se tiene que manejar excepciones. ya que solo se cuenta con el método read. como para el objeto InputStreamReader. se debe convertir ese valor al tipo requerido. la variable a recibir el valor. esto implica que si no es un dato de este tipo. A continuación. al momento de realizar la lectura del dato. … Ahora modifiquemos los mensajes de salida.util).lang). unos más complicados que otros. para que se muestre de la siguiente forma: Programación III – Práctica Guiada N°1 Página 7 de 13 Profesor Hugo Hernández . se empleará un parseo. utilizando la clase envolvente a un dato tipo int. Esto se logra utilizando la sentencia import. primero se debe importar la librería java.io. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA En Java. se crearon clases que implementan la entrada estándar de datos. los cuales nos permitan leer de manera más sencilla la información. sino utilizando la clase envolvente del tipo de dato a pasar empleando el método valueOf() o realizando un parseo. leer datos por teclado no es tan sencillo como en otros lenguajes de programa. el cual lee la información carácter por carácter. Por ser estos objetos. y se debe hacer antes de la construcción de la clase (EntornoJava1). Si se quiere utilizar la constante in. tanto para poder utilizar el objeto BufferedReader. Finalmente. también se puede emplear un objeto BufferedReader combinada con un objeto InputStreamReader (ambos incluidos en la librería: java. existen varias formas de leer datos por teclado. para logra se usa la palabra reservada new. teniendo en cuente que al momento de realizar la lectura. el cual toma la información y lo devuelve como un dato tipo String.io). procedimiento que también maneja excepciones o empleando un objeto Scanner (librería: java. se muestra el código completo realizando estas tres actividades (Importación de las clases. El objeto BufferedReader. donde se puede emplear la constante estática in de la clase System (librería: java. luego el nombre de la clase del objeto y por último los parámetros requeridos al caso. tiene que realizarse dentro de una sentencia Try/Catch. Por este el motivo. lectura que se debe realizar hasta que finalice el contenido del buffer (todos los caracteres de la línea). definición del objeto y lectura del dato). cuenta con el método readLine(). se deben de construir o instanciar.

se posiciona el cursor. cero. en que se lanzó o lanzará el objeto. Completemos el código de la siguiente manera y ejecutemos el programa dando como número del piso = 2. para poderle utilizarla. se inicializa en un valor cualquiera. o 2. Observe que en la ventana de salida. si se ha leído previamente. se tiene al menos que asignar un valor a la variable. ej. Programación III – Práctica Guiada N°1 Página 8 de 13 Profesor Hugo Hernández . de pisos. sin haber leído de la variable o haber sido inicializada. que está en un ámbito de trabajo diferente al del cuerpo del método main. para que la variable posea valor previo a la impresión. para que el usuario del programa pueda suministrar el nro. dentro del cuerpo de la sentencia Try/Catch. el error se produce debido a que la variable como tal no ha sido inicializada. Pero. para la distancia existente en el piso que se lanza el objeto. Esto ocurre por el hecho de que la lectura se realiza. Este error también ocurre.Al momento de definir la variable. Hay dos formas de evitar este problema. Este error se genera debido a que Java es un lenguaje fuertemente tipificado.Se colocan todas las instrucciones restantes dentro del cuerpo de la sentencia Try/catch. en una siguiente instrucción a su declaración. en la variable nroPiso. 1. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Note que el compilador nos indica que existe un error de sintaxis. ¿para qué inicializarlo?. Esto significa que aunque Java se asigna a una variable un valor predefinido. si se hubiese determinado la velocidad y el tiempo.

al suministrando un valor que no es de ese dato. Pero note. los mismos resultados que empleando la clase BufferedReader. ya que no se usa esta sentencia. Como era de esperarse se obtienen. que solo requiere como parámetro la constante in de la clase System y finalmente para leer la información. ya que dará como respuesta un error de ejecución. se debe importar la librería java. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Al finalizar la ejecución se obtienen los siguientes resultados: Finalmente.util. que ahora no se necesita realizar la lectura dentro de una sentencia Try/Catch. sino que se le indica directamente el tipo de valor a leer y el usuario no debe equivocarse. A continuación. nextLong(). ejemplo: nextInt(). también podemos realizar la lectura de datos empleando un objeto de la clase Scanner. y por otro lado. Modifique el código y póngalo a prueba nuevamente con dos pisos de altura. se muestra cómo quedaría el código aplicando esta clase. no se requiere inicializar la variable nroPiso. esta clase es menos complicada utilizar. ya que no arroja excepciones. si es tipo long y así sucesivamente. para leer un dato tipo int. construir el objeto. la clase cuenta con un método distinto para cada tipo de dato. Programación III – Práctica Guiada N°1 Página 9 de 13 Profesor Hugo Hernández . Ahora para trabajar con la clase Scanner.

de la variable a formatear.format(String formato.*. tienen los mismos argumentos. Solo aplica para datos reales. Alineación a la izquierda. Object … datos):String Donde en el String de formato.precisión]carácter_de_conversión Todos los elementos entre corchetes son opcionales y representan: Posición_dato$. pero de querer usar cualquiera de las otras dos forma. Hay veces que se quiere ver cierta cantidad de decimales. es la posición que ocupa en la lista de datos tipo objetos. cuando se quiere establecer el formato de salida de una variable. + Muestra signo + en números positivos. Programación III – Práctica Guiada N°1 Página 10 de 13 Profesor Hugo Hernández . es decir. ejemplo para el caso del método format de String: String. no existirá ninguna diferencia de trabajo. Ancho: Indica el tamaño mínimo. su sintaxis es: %[posición_dato$][Indicador_de_formato][ancho][. ya que aún no se ha tocado el tema de las excepciones. que debe ocupar el dato en pantalla. Los caracteres posibles son: Indicador Significado . h) Formateo de datos o enmascarar datos de salida. o ver la salida con un aspecto en particular. ambas son importadas. pertenecientes de una misma librería. la forma como trabajaremos la entrada de datos por teclado. esto se logra realizando un formateo de salida. En Java hay dos formas distintas para realizar esta actividad y son el método printf o format de la constante out de la clase System o el método format de la clase String. . si no que quiere importar cada una de las clases necesarias en el código a programar. medido en número de caracteres. en un resultado.io. será utilizando la clase Scanner. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Como información adicional. . ( Valores negativos se muestran entre paréntesis. simplemente se puede importar en su totalidad colocando el nombre de la librería. En términos generales. el primero de la lista ocupa la posición 1. Indicador_de_formato: es el conjunto de caracteres que determina el formato de salida. colocando simplemente: import java. Todos los métodos nombrados anteriormente. 0 Rellena los espacios con ceros.precisión: Indica el número de decimales que serán representados en pantalla. Muestra separador decimal.*. en el caso de necesitar las clases BufferedReader e InputStreamReader.

Conversor Valor Conversor Valor %n Salto de línea (igual que /n) %x Entero hexadecimal %b Booleano %f Real decimal %h Hashcode %e Real notación científica %s Cadena %g Real notación científica o decimal %c Carácter Unicode %a Real hexadecimal con mantisa y exponente %d Entero decimal %t Fecha u hora %o Entero octal Modifiquemos las salidas de la siguiente manera y ejecutemos nuevamente la aplicación En las modificaciones colocadas. Si realizamos una depuración paso a paso por instrucción. se puede emplear como el valor a concatenar en la cadena de mensaje a mostrar. En este menú se puede realizar puntos de parada(breakpoint). pausar la ejecución(pause). se observa el uso de las tres formas para dar formatos de salida. continuar la ejecución(continue). se manejó como el dato a mostrar en el formato de salida. es depurar él mismo. Esto se logra utilizando las opciones presentes en el menú de depurar(debug). cuando se usó la clase String. en realidad. empleando una de las alternativas. sin embargo. las pestañas variables y breakpoints. y en la ventana de salida (output). si se utiliza la instrucción println. sea empleando la tecla función 8 (F8). que no hay inconvenientes para imprimir las constantes altura y unidad. Note ahora. métodos(step into next method). para observar algún error en un programa al ejecutarse. i) Depuración de un programa Una actividad frecuente. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Carácter_de_conversión: Carácter que indica cómo tiene que ser formateado el dato. nos encontramos que se habilitaron las ventanas: debugging(a la izquierda del editor). realizar paso a paso por instrucción(step over). Finalmente. solo necesita usted trabajar. etc. Programación III – Práctica Guiada N°1 Página 11 de 13 Profesor Hugo Hernández .

Finalmente. El procedimiento de depuración es comúnmente usado.81.Con un resaltado verde. posicionándonos primeramente en la línea a detenernos y luego. que hasta el momento se ha instanciado en el método main. los valores que van asignándose a cada una de las variables. recuerde que la variable entrada es un objeto del tipo Scanner y los objetos lo que almacenan. nos aparece que tiene el valor de 9. pulsando la tecla abreviada Ctrl+Mayús+F8 o con el mouse cliquear el número de la línea a pararnos. este valor representa una posición de memoria. 2. nos muestra los pasos que se llevan a cabo durante la ejecución. Programación III – Práctica Guiada N°1 Página 12 de 13 Profesor Hugo Hernández . si no se quiere correr todas las línea de ejecución se pueden colocar punto de parada. lo que hace mucho más fácil visualizar. sin embargo. pulsando la opción nuevo punto de parada(new breakpoint). observe que el valor que almacena la variable entrada es #307. nos muestra el depurador. cuando no se observa un error de ejecución al programa. Y gracias a que la ejecución paso a paso por instrucción. Esta diferencia del valor. se debe al conocido error de punto flotante. Por otro lado. es una referencia a la dirección de memoria que se utiliza para guardar los datos que va contener. qué línea del código se está ejecutando en ese momento. donde se observa la lista de variables y constantes locales. Observe en particular el caso de la constante gravedad. esta constante fue definida con un valor de 9. es de seis dígitos. así como. que nos faltó o donde fallamos al escribir el código. este mismo error ocurre si hubiese sido declarada como una dato tipo double.8100004196187 (este valor puede variar). recuerde que la precisión de un dato tipo float. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Observe los siguientes detalles al realizar la ejecución paso a paso por instrucción: 1. 3. los dígitos siguientes no son significativos o son erróneos.Si nos colocamos en la ventana de variables.

y Otros  Curso de Java. García J. Peña R.2. UNIVERSIDAD JOSÉ ANTONIO PÁEZ FACULTAD DE INGENIERÍA Referencias en línea:  Aprenda Java como si estuviera en primero (2000). Programar ¡Ya! .  Java y NetBeans (2011).com.Format  Instalador del JDK 8 con NetBeans 8. este tutorial en línea es más completo y abarca todos los temas que estaremos desarrollando en el presente curso.exe y para las de 64Bit emplee jdk-8u131-nb-8_2-windows-x64.  Referencias de Java por ORACLE  Tabla de códigos ASCII Programación III – Práctica Guiada N°1 Página 13 de 13 Profesor Hugo Hernández .  Formatear cadenas con String.com.  Curso de Java. recomendado para interpretar las sentencias e instrucciones en Java de una manera sencilla. Aprender a programar .exe. NOTA: si su máquina es de 32Bit emplee el instalador por nombre jdk-8u131-nb-8_2-windows- i586.