Compilación y ejecución manual con Java

JAVA, JavaSE Sin Comentarios »
Revisando los contenidos para la scja, encontré un problema con la parte de compilar, nunca lo había hecho de forma manual, siempre utilizando Eclipse. Así que para que no se me olvide y por si le sirve a alguien explicaré el ejemplo que viene en un ejercicio de compilación, se tienen 4 clases en dos paquetes (paquete y sub paquete) son:
package com.scjaexam.tutorial;
import com.scjaexam.tutorial.planets.*;
public class GreetingUniverse
{
public static void main(String[] args)
{
Earth e;
Mars m;
Venus v;
System.out.println(“Greeting Universe!”);
e= new  Earth();
m = new Mars();
v= new Venus();
}
}
Ojo no olvidar agregar el import ya que si no el compialdor no sabrá donde se encuentran esas clases.
package com.scjaexam.tutorial.planets;
public class Earth
{
public Earth()
{
System.out.println(“Hello from Heart”);
}
}
package com.scjaexam.tutorial.planets;
public class Mars
{
public Mars()
{
System.out.println(“Hello from Mars!!!”);
}
}
package com.scjaexam.tutorial.planets;
public class Venus
{
public Venus ()
{
System.out.println(“Hello from Venus!!!”);
}
}
Con los cuatro códigos fuente en un mismo directorio llamado 26
Se compilan cada clase del sub paquete planets así
javac -d . Venus.java
javac -d . Earth.java
javac -d . Mars.java
La opción -d deja el .class en la ruta específicada en la clase (hay que recordar que la declaración package se traduce para el sistema operativo como una ruta específica en este caso com.scjaexam.tutorial se lleva a
/home/joseangel/Desarrollo/workspace/sin_ide/26/src/com/scjaexam/tutorial), tambien si esta ruta no existe, la crea.
hora bien, para compilarbasta con hacer
javac -d . GreetingUniverse.java
Para ejecutar, y al formar parte  de un paquete, tenemos que ejecutarlo con el nombre del paquete sin extensión, esto es:
java com.scjaexam.tutorial.GreetingUniverse
Hasta ahora todo bien, dentro del directorio src se debió de haber creado el directorio del paquete y subpaquete respectivamente, la cual es:
GreetingUniverse.class en
/home/joseangel/Desarrollo/workspace/sin_ide/26/src/com/scjaexam/tutorial
y
Earth.class, Venus.class, Mars.class en
/home/joseangel/Desarrollo/workspace/sin_ide/26/src/com/scjaexam/tutorial/planets/
Ahora, que pasaría si cambiamos de paquete a Earth.class y lo situamos en el package otro.scjaexam/tutorial
primero hay que agregar el paquete a la clase principal, esto en  GreetingUniverse.java, agregamos la linea
import otro.scjaexam.tutorial.planets.*;
luego compilamos de nuevo Earth.java con la opción -d
intentamos compilar la clase GreetingUniverse.java y todo resulta a la perfección, pero ahora que sucedería si a la clase Venus.class la sacamos de la estructura del paquete, es decir lo ponemos enun directorio diferente.
Para ejecutar no tiene cambio alguno, ya que se encuentran dentro de la ruta actual donde inician los paquetes, es decir tanto otro.scjaexam.tutorial.planets como com.scjaexam.tutorial.planets están dentro de src.
para diferenciar esto, agregamos Venus.class al paquete fuera.scjaexam.tutorial.planets para ello cambiar su declaración package a:
package fuera.scjaexam.tutorial.planets;
compilamos de nuevo Venus.java.
javac -d . Venus.java
despues movemos la estructura del paquete a otro directorio, por ejemplo movemos desde …/fuera/scjaexam/tutorial/planets/Venus.class a /home/joseangel/Escritorio
quedando de esta manera /home/joseangel/Escritorio/fuera/scjaexam/tutorial/planets/Venus.class
ahora intentamos compilar la clase principal GreetingUniverse.java y obtenemos esto7
[joseangel@lap src]$ javac -d . GreetingUniverse.java
GreetingUniverse.java:3: package fuera.scjaexam.tutorial.planets does not exist
import fuera.scjaexam.tutorial.planets.Venus;
^
1 error
para resolver este problema usamos la opción -cp
hay que poner especial atención, ya que al utilizar la opción cp, le decimos al compilador donde se encuentran las clases, para ello recordamos que el separador para rutas en windows es ; (punto y coma) y en windows son : (dos puntos), así la opción completa para compilar podría ser:
javac -d . -cp /home/joseangel/Escritorio   GreetingUniverse.java
sin embargo esto nos procaría el siguiente error:
javac -d . -cp /home/joseangel/Escritorio   GreetingUniverse.java
GreetingUniverse.java:2: package com.scjaexam.tutorial.planets does not exist
import com.scjaexam.tutorial.planets.*;
^
GreetingUniverse.java:4: package otro.scjaexam.tutorial.planets does not exist
import otro.scjaexam.tutorial.planets.Earth;
^
GreetingUniverse.java:10: cannot find symbol
symbol  : class Earth
location: class com.scjaexam.tutorial.GreetingUniverse
Earth e;
^
GreetingUniverse.java:11: cannot find symbol
symbol  : class Mars
location: class com.scjaexam.tutorial.GreetingUniverse
Mars m;
^
GreetingUniverse.java:14: cannot find symbol
symbol  : class Earth
location: class com.scjaexam.tutorial.GreetingUniverse
e= new  Earth();
^
GreetingUniverse.java:15: cannot find symbol
symbol  : class Mars
location: class com.scjaexam.tutorial.GreetingUniverse
m = new Mars();
^
6 errors
Esto es porque al compilador le decimos donde está unicamente la clase Earth.class, por eso para decirle exactamente donde están nuestras clases tenemos que especificar dos rutas, la ruta actual de Earth.class y Mars.class con . (punto) y la ruta de Venus.class
para ello lo hacemos de la siguiente forma:
javac -d . -cp .:/home/joseangel/Escritorio   GreetingUniverse.java
y nos compila sin ningún problema.
para ejecutar se tiene que agregar una nueva opción al compilador cp quedando de la siguiente forma:
java -cp .:/home/joseangel/Escritorio com.scjaexam.tutorial.GreetingUniverse
la misma advertencia anterior, se tiene que poner .:/home/joseangel/Escritorio de esta manera le decimos al interpreta java que las clases se encuentran en el mismo directorio src (clases Mars.class y Earth.class) y en la ruta /home/joseangel/Escritorio (Venus.class), si no se pone el . (punto), el interprete java no encontraría las clases dentro de src (Mars y Earth) mostrando el siguiente error.
[joseangel@lap src]$ java -cp /home/joseangel/Escritorio com.scjaexam.tutorial.GreetingUniverse
Exception in thread “main” java.lang.NoClassDefFoundError: com/scjaexam/tutorial/GreetingUniverse
Caused by: java.lang.ClassNotFoundException: com.scjaexam.tutorial.GreetingUniverse
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: com.scjaexam.tutorial.GreetingUniverse. Program will exit.

CPJD&D5 4.16

JAVA, Problemas D&D 5eD Sin Comentarios »

Capítulo 4 problema 16.

Escriba una aplicación en Java que utilice ciclos para imprimir la siguiente tabla de valores:

N     10*N     100*N     1000*N

1     10     100     1000

2     20     200     2000

3     30     300     3000

4     40      400     4000

5    50      500     5000

Solución.

CPJD&D5 4.15

JAVA, Problemas D&D 5eD Sin Comentarios »

Capítulo 4 problema 15.

El proceso de encontrar el valor más grande (es decir el máximo de un grupo de valores) se utiliza frecuentemente en aplicaciones de computadora. Por ejemplo, un programa para determinar el ganador de un concurso de ventas recibe como entrada el número de unidades vendidas por cada vendedor. El vendedor que haya vendido más unidades es el que gana el concurso.  Escriba un programa en pseudo código y después una aplicación en Java  que reciba como entrada una serie de 10 número de un solo dígito como caracteres, y que determine e imprima el mayor de los números. Su programa debe utilizar cuando menos las siguientes tres variables:

  • Contador: Un contador para contar hasta 10 (es decir, para llevar el registro de cuantos números se han introducido, y para  determinar cuando se hayan procesado los 10  números);
  • número: El dígito actual introducido en el programa;
  • mayor: el número más grande encontrado hasta ahora.

Solución.

CPJD&D5 4.14

JAVA, Problemas D&D 5eD 1 Comentario »

Capítulo 4 problema 14.

Desarrolle un aplicación en Java que determine el sueldo bruto para cada uno de tres empleados. La empresa paga la “cuota normal” en las primeras 40 horas de trabajo de cada empleado, y paga “cuota y media” en todas las horas trabajadas que excedan de 40. Usted recibe  una lista de los empleados de la empresa, el número de horas que trabajó cada empleado la semana pasada y la tarifa por horas de cada empleado. Su programa debe recibir como entrada esta información para cada empleado, debe determinar y mostrar el sueldo bruto de cada empleado. Utilice cuadros de diálogo de entrada para introducir los datos.

Solución.

CPJD&D5 4.13

JAVA, Problemas D&D 5eD Sin Comentarios »

Capítulo 4 problema 13.

Una empresa grande paga a sus vendedores mediante comisiones. los vendedores reciben $200.00 por semana más el 9% de sus ventas brutas durante esa semana. Por ejemplo, un vendedor que vende $5000.00  de mercancía en una semana, recibe $200.00 mas el 9% de $5000.00 o un total de $650.00. Usted acaba de recibir una lista de los artículos vendidos por cada vendedor. Los valores de estos artículos son los siguientes:

Artículo             Valor

  1. ……..  239.99
  2. ……..  129-75
  3. ……..     99.95
  4. ……..   350.89

Desarrolle una aplicación que reciba como entrada los artículos vendidos por un vendedor durante la última  semana, y calcule y muestre los ingresos de ese vendedor. No hay límite en cuanto al número de artículos que un vendedor puede vender.

Solución

CPJD&D5 4.12

JAVA, Problemas D&D 5eD Sin Comentarios »

Capítulo 4 problema 12

Desarrolle una aplicación en Java que determine si el cliente de una tienda de departamentos se ha excedido del límite de crédito en una cuenta. Paracada cliente se tienen los siguientes datos:

  • El número de cuenta.
  • El saldo al inicio del mes.
  • El total de todos los artículos cargados por el cliente al mes.
  • El total de todos los créditos aplicados a la cuenta del cliente en el mes.
  • El límite de crédito permitido.

Solución.

CPJD&D5 4.11

JAVA, Problemas D&D 5eD Sin Comentarios »

Problema 11 capítulo 4

Los conductores se preocupan acerca del kilometraje  de sus automóviles. un conductor ha llevado el registro de varios reabastecimientos de gasolina, registrando los kilómetros conducidos y los litros usados en cada reabastecimiento. Desarrolle una aplicación en Java que reciba como entrada los km conducidos y los litros usados (ambos como enteros) por cada reabastecimiento. El programa debe calcular y mostrar los kilómetros por  litro obtenidos en cada reabastecimiento, y debe imprimir el total de kilometros por  litro obtenidos en todos los reabastecimientos hasta este punto. Todos los cálculos  del promedio deben producir resultados en números de coma flotante.

use cuadros de diálogo de entrada para obtener  los datos de usuario.

Solución

Programación en JAVA.

JAVA, Problemas D&D 5eD Sin Comentarios »

A partir de hoy, comenzaré a resolver los ejercicios de programación del libro como programar en Java Quinta Edición de Deitel & Deitel, espero que a alguien le sean de ayuda, sobre todo para los que apenas se inician en el mundo de la programación utilizando el lenguaje java.

Todas las soluciones fueron implementadas mediante el uso del IDE Eclipse.

Los títulos de los post serán CPJD&D5 X.YY el cual quiere decir, Cómo Programar en Java de Deitel & Deitel 5 edición, la X corresponde al capítulo y las YY al número de problema específico.

Espero le sirva de ayuda a alguien.

WP Tema & Iconos por N.Design Studio
Entradas RSS Comentarios RSS Iniciar sesión