Calculadora básica en Android

0 comentarios

Seguimos haciendo lo básico de la programación, en este caso es un código que le he repasado a kabalt ya que no le funcionaba, lo subo yo por que soy la única persona activa de este blog.

Se trata de una calculadora muy básica suma, resta, multiplica, divide y hace potencias, nada del otro mundo. El problema es que esta persona trabaja desde hace años en host, con PL1 o Cobol y claro, todo lo que es la POO se le ha olvidado del todo, acepto el moverse en el mundillo de Android para recuperar un poco lo que es la lógica de la programación orientada a objetos, no es que yo sea un lumbreras en todo esto pero bueno, tampoco lo desconozco, como siempre os dejo el código y una pequeña captura de pantalla para que comentéis que os parece.

public class textobox extends Activity 
{
/*private EditText Minumero;*/

private EditText Miresultado;

public boolean operando = false;

public int num;
public char operacion = ' ';
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


/* Minumero =(EditText) findViewById(R.id.numero); */
Miresultado=(EditText) findViewById(R.id.Resultado);
/* Identificadores de los botones suma, resta, multiplica y divide */
Button Suma = (Button) findViewById(R.id.Sumar);
Button Resta = (Button) findViewById(R.id.Restar);
Button Multiplica = (Button) findViewById(R.id.Multiplicar);
Button Divide = (Button) findViewById(R.id.Dividir);
Button Mostrar = (Button) findViewById(R.id.Mostrar);
Button Reset = (Button) findViewById(R.id.Reset);
Button Quadrado = (Button) findViewById(R.id.Quadrado);
/* declaramos variable auxiliar para las operaciones */

/* acciones onclick para cada boton */
try{
Suma.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
num = Integer.parseInt(Miresultado.getText().toString());
operacion = '+';
operando = true;
}else{
num = num + Integer.parseInt(Miresultado.getText().toString());
operacion = '+';
}
Miresultado.setText(null);
}
});
Resta.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
num = Integer.parseInt(Miresultado.getText().toString());
operacion = '-';
operando = true;
}else{
num = num - Integer.parseInt(Miresultado.getText().toString());
operacion = '-';
}
Miresultado.setText(null);
}
});
Multiplica.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
num = Integer.parseInt(Miresultado.getText().toString());
operacion = '*';
operando = true;
}else{
num = num * Integer.parseInt(Miresultado.getText().toString());
operacion = '*';
}
Miresultado.setText(null);
}
});
Divide.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
num = Integer.parseInt(Miresultado.getText().toString());
operacion = '/';
operando = true;
}else{
num = num / Integer.parseInt(Miresultado.getText().toString());
operacion = '/';
}
Miresultado.setText(null);
}
});
Quadrado.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
num = Integer.parseInt(Miresultado.getText().toString());
operacion = 'C';
operando = true;
}else{
double numero = Math.pow((double)num,Double.parseDouble(Miresultado.getText().toString()));
num=(int)numero;
operacion = 'C';
}
Miresultado.setText(null);
}
});
Mostrar.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
if(!operando){
Miresultado.setText(opera(num,Integer.parseInt(Miresultado.getText().toString()),'*'));
operacion = '=';
}else{
Miresultado.setText(opera(num,Integer.parseInt(Miresultado.getText().toString()),operacion));
operacion = '=';
}
operando = false;
}
});
Reset.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
num = 0;
operacion = ' ';
operando = false;
Miresultado.setText("");
}
});
}catch(Exception e){
num = 0;
operacion = ' ';
operando = false;
Miresultado.setText("Error");
}
}

public String opera(int x, int y, char operacion){
String num;
switch(operacion){
case '+':
num = ""+(x+y);
break;
case '-':
num = ""+(x-y);
break;
case '/':
num = ""+(x/y);
break;
case '*':
num = ""+(x*y);
break;
case 'C':
double numero = Math.pow((double)x,(double)y);
num=""+numero;
break;
default:
num = "Tipo de operación no soportado";
break;
}
return num;
}
}



 



image

Segundo intento con Android

0 comentarios

Bueno, siguen siendo cosas básicas y prácticamente copiadas de internet, pero por algún lado se tendrá que empezar.

En este caso se ha creado un programa que tiene un menú, este menú tiene dos opciones, la primera hace que aparezca un texto y la segunda borra este texto. Sigue siendo todo estatico pero no esta del todo mal :)

imageimageimage  4. imageimage 

image

Primer cameo con Android

0 comentarios

Buenas, se que tendría que estar con el SCJP, pero en esto no se tardaba nada y lo tenia pendiente desde hace años :s.

Mira que es fácil, seguramente si buscáis dos minutos más podréis encontrar el paso a paso de como hacer esto, por que realmente no se pica ni media línea.

En definitiva todo lo que sale en pantalla es una línea que pone Hola Mundo, pero bueno, por algo se tiene que empezar.

HolaMundo Android

El sistema es casi tan simple como puede ser el echo de crear un nuevo proyecto que se denomine “HolaMundo”. No he creado una sola línea de más, y la verdad es que modificando un par de líneas puedo conseguir que ponga otras cosas.

image

Sin saber que hacer.

0 comentarios

sadmen

Hace una semana tuve reunión con mi manager para hablar de dinero, se que no estamos en una época realmente buena para subidas, pero yo llevaba una buena base sobre la que sostenerme para una subida de las buenas.

Tengo tres años de experiencia en el sector, no es que sea especialmente malo en este tipo de trabajo, pero para mi experiencia soy en mi humilde opinión de un nivel bueno, en estos momentos estoy ganando el salario que por desgracia pacte en el momento de entrar hace ya dos años, en ese momento el salario pactado me pareció correcto.

En el año 2008 con apenas un año de experiencia pacte un salario de 16k con un aumento a 18k pasado el periodo de prueba, como os podéis imaginar la subida a 18k no se llego a realizar, desde ese momento he estado sobreviviendo con esos 16k. Ahora tras dos años de enseñar de lo que soy capaz de hacer, me encuentro con una paupérrima subida de 1’5k al año, todo esto en bruto, claro esta. Lo sorprendente de esto es que mi manager no hablo con ninguno de mi equipo para valorar mi subida y poder hacerla acorde a mis conocimientos.

El cachondeo no termina en ese punto, según mi manager, si me saco el SCJP se me subiría el salario automáticamente, claro, tras el gol que me marcaron con los 18k como puedo creerme que me subirá el salario si yo me saco el SCJP y sobre todo como puedo creerme que la subida será acorde al titulo que ostentaré desde ese momento.

Con tres años de experiencia en otras empresas me darían entre 21k y 24k y eso en el momento actual, que no tengo el SCJP, con el titulo bajo la mano fácil que pudiera conseguir cerca de 27k en algunas empresas que sí que valoren mi trabajo, claro esta, la duda es muy simple, realmente me llegarían a subir 10k por solamente un titulo o nada más me subirían otros 1’5k, realmente la subida no seria acorde a mis conocimientos fuera cual fuera el caso por que en el momento de sacarme el SCJP yo ya tendría entre 3’5 años y 4 años si es que me lo consigo sacar entre seis y doce meses. Claro con 4 años seguramente 27k seria lo mínimo que conseguiría, 30k como mucho gracias al SCJP, dudo que la subida sea tan amplia y rápida por lo que sigo…SIN SABER QUE HACER.

JAVA se6 & Swing Buen libro con malos ejercicios.

0 comentarios

prohibidoJavaMe había comprometido a acabar con este libro,  tenia pensado poner todos los ejercicios y todas las soluciones, plantear el problema y la resolución de todo esto. Lo he intentado pero he llegado a la página 39 y me he quedado mirando el primer ejercicio que viene, con el nivel adquirido asta esa pagina solo tienes dos opciones, o bien te pones a picar como un loco asta que puedes dar el resultado por pantalla o tiras de conocimientos ya adquiridos (si es que los tienes) y comienzas a realizarle recursivas y algoritmos divertidos.

En definitiva, si no haces mucho caso a los ejercicios el libro esta bien, es “entretenido” y didáctico, pero no esperéis que los ejercicios sean acorde a lo que os ha enseñado el pavo asta este momento.

Yo me paso al SCJP y ya veremos si me lo consigo de sacar, ya iré informando :)

JAVA SE6 & Swing Capitulo 02 pag.33 Ej.2

0 comentarios

Construir un programa en que se declare una lista de números de tipo float y calcular su media.

image

Como podemos observar hemos reaprovechado el código que hemos usado con anterioridad ya que teníamos creada una lista que se podía reaprovechar.

El ultimo print que hacemos es para comprobar la media, para ello cogemos el total de la suma y lo dividimos por el total de números que hemos pasado, seria lo mismo que si lo dividiéramos con la variable “i” pero como lo hemos declarado en el for ya no se puede utilizar fuera, esto es lo que se denomina el ámbito de una variable.

Respecto al ámbito de una variable, éste puede ser:

  • Local: Cuando la misma sólo es accesible desde un único procedimiento hijo, no pudiendo ser leída o modificada desde otro procedimiento hermano o desde el propio procedimiento padre. Es posible declarar variables en bloques de condición, bucles, etc de tal modo que sólo pueda accederse a ellas en el propio bloque.
  • Global: Cuando la misma es accesible tanto desde rutinas o macros de la aplicación, como en todos los procedimientos y funciones de la misma.

public class MediaFloat {
public static void main(String[] args) {
float lista[] = {1,3,5,7,9,2,4,6,8};
float total = 0;

for (int i=0;i<lista.length;i++){
if(i==0)
System.out.print(lista[i]);
else if (i==lista.length-1)
System.out.println(", "+lista[i]);
else
System.out.print(", "+lista[i]);
total += lista[i];
}

System.out.println(""+ total/lista.length);
}
}

JAVA SE6 & Swing Capitulo 02 pag.33 Ej.1

0 comentarios

Construir un programa en que se declare una lista de números de tipo double y mostrar esa lista en pantalla por orden de declaración y por orden inverso.

Poco hace falta decir, este ejercicio se supone que era para tener un primer acercamiento al for, pero como ya lo hemos echo antes pues simplemente pongo el resultado como siempre. En esta ocasión voy a probar un plug-in que he puesto en el blogger hace nada, de todas maneras os dejo la imagen para que no sufráis mucha nostalgia

image

public class Lista {
public static void main(String[] args) {
double lista[] = {1,3,5,7,9,2,4,6,8};

for (int i=0;i<lista.length;i++){
if(i==0)
System.out.print(lista[i]);
else if (i==lista.length-1)
System.out.println(", "+lista[i]);
else
System.out.print(", "+lista[i]);
}
for (int i=0;i<lista.length;i++){
if(i==0)
System.out.print(lista[(lista.length-1)-i]);
else if (i==lista.length-1)
System.out.println(", "+lista[(lista.length-1)-i]);
else
System.out.print(", "+lista[(lista.length-1)-i]);
}
}
}

JAVA SE6 & Swing Capitulo 02 pag.28 Ej.2

0 comentarios

Construir un programa que calcule mediante números de tipo float el factorial de un número que no se pueda calcular empleados números de tipo int.

image

Viendo que en el anterior ejercicio el tipo no respetaba sus propias enseñanzas ni sus propios métodos pues yo no pienso ser menos, arriba se puede ver la solución al ejercicio.

Podemos observar que el máximo factorial es 12 que nos da un resultado de 479001600, el siguiente nos daría 6227020800 el cual superaría el máximo lógico de los integer.

Explicando un poco el código podemos ver una estructura de control, este while se ejecutara siempre y que se cumpla lo que tiene dentro del paréntesis, le he puesto un true por que no quiero que salga nunca asta que no se cumpla lo que tengo en el if, realmente podría haber puesto la condición dentro de otro tipo de estructura de control pero he elegido esta manera por que me parece que es la manera más cómoda para comprender.

En el if tengo puesto para que se haga una división entre el actual resultado factorial y el siguiente, de esta manera consigo el factorial en el que nos encontramos, como los integers son cíclicos esta es la única manera de saberlo, por que si no nos iriamos a 13 ciclos para poder comprobar que es negativo.

JAVA SE6 & Swing Capitulo 02 pag.28 Ej.1

0 comentarios

Construir un programa que calcule el número de segundos que hay.

a) en una semana

Lo primero que tenemos que recordar es cuantos segundos hay en un día, para ello tenemos que recordar que un día tiene 24 horas, una hora tiene 60 minutos y cada minuto 60 segundos. Tras calcular los segundos de un día ya podremos calcular los segundos de tantos días como queramos.

Nuestro primer objetivo es una semana por lo tanto son 7 días. La solución es la siguiente.

image

b) en un mes

Ahora nos solicitan un mes, lo cual es un problema por que no es un numero estándar, tenemos cuatro opciones que son 28 o 29 días en año bisiesto y luego tenemos los meses de 30 y 31 días.

image

c) en un año

En este caso tenemos solamente dos opciones, año normal y año bisiesto.

image

JAVA SE6 & Swing Capitulo 02 pag.25 Ej.3

0 comentarios

Construir un programa que calcule el producto de los 10 primeros números enteros. ¿Cuál es el mayor factorial calculable con números de tipo int, esto es, hasta qué valor de n se puede calcular el producto de los n primeros números enteros?

Me encontraba en una encrucijada con este ejercicio, me parecía demasiado trabajo para un ejercicio del segundo tema y después de estar picando y cabreándome me pare a mirar que es lo que decía la pagina web de esta pequeña practica y me encontré con lo que se puede observar aquí debajo, me parece una manera muy burda de engañar a la gente, imaginaros todas las líneas que llevaba escritas para encontrarme con que esta gente lo realizo con un for, una estructura de control que aunque todos conocemos forma parte del capitulo tres y no tendría que haber aparecido en este capitulo de manera que nos quedamos con el formato que nos ofrece José Rafael y asta que lleguemos allí hacemos un acto de fe de que el for solucionara todo lo que necesitamos.

image

JAVA SE6 & Swing Capitulo 02 pag.25 Ej.2

0 comentarios

2. Los tipos de datos numéricos no tienen alcance infinito. Construir un programa que multiplique dos números de tipo int con valores próximos al alcance indicado en la tabla. Comprobar que el resultado es incorrecto. Este problema se denomina desbordamiento, y se produce cuando el resultado obtenido no se puede representar empleando el tipo de datos indicado.

Nombre

Tamaño

Alcance

short

16 bits

desde –32768 hasta 32767

int

32 bits

desde –2147483648 hasta

long

64 bits

desde –9233372036854775808 hasta 9233372036854775807

De esta manera si lo que buscamos es conseguir un desbordamiento de memoria solo tenemos que ponerle a cada tipo su máximo y sumarle uno.

image

Pero tal y como se puede contemplar en la imagen el desbordamiento u overflow no se produce, el tipo de dato es cíclico y nos retorno el siguiente valor. Os dejo lo que dice SUN sobre el por que de este funcionamiento.

Why does Java ignore overflow? Most computer hardware has no ability to automatically generate an interrupt on overflow. And some hardware has no ability to detect it. Java would have to explicitly test for it on every add, subtract and multiply, greatly slowing down production. Further ex-C programmers are very used to this cavalier ignoring of overflow, and commonly write code presuming that high order bits will be quietly dropped. The Pentium has hardware overflow detect but no hardware interrupt. So if Java were to support overflow detect, inside the JVM implementation would need to add a JO *jump on overflow" instruction after every add and subtract, and special code to look at the high order bits of the 32x32->64 bit multiply. 64/32->32 bit division might need special handling.

JAVA SE6 & Swing Capitulo 02 pag.25 Ej. 1

0 comentarios

1º Construir las tablas de multiplicar (hasta el 5) utilizando el formato tabulado habitual.

Hasta este punto lo que el libro nos ha enseñado son tres cosas:

-La lógica de entrada y salida de datos. Esto sirve para que el usuario pueda interactuar con el programa.

-Los operadores aritméticos básicos que son ( + , – , * , / , % )

-Los tres tipos de enteros y lo que ocupa cada uno en memoria.

  • short --> 16 bits
  • (int)eger --> 32 bits
  • long --> 64 bits

Por lo que el código quedaría como se puede observar en la imagen, o como se puede observar en el código adjunto.

TablaMultiplicar.java

Menudo pollo

0 comentarios

Bufff, que asco de vida, me dan toda una nueva funcionalidad para desarrollar y como yo lo veo claro creando un PL/SQL y algún script que ejecute y recupere los logs lo taso en "X" horas y ahora si o si lo tengo que hacer todo bajo Java, con un Framework más violado que la dignidad del internauta (gracias Sinde).

Total que no se como lo voy a hacer ni para cuando lo tendré, pero ya me he comprometido con una fecha y ahora tengo que cumplir, y yo me pregunto, no me podrían haber dicho de saque que nada de originalidad y que todo con Java, le hubiera puesto más horas.

JAVA SE6 & Swing Capitulo 01 pag.12 Ej.4

0 comentarios

4. En los ejercicios cuatro, cinco y seis el libro nos solicita que hagamos un mismo ejercicio en tres SDK diferentes, te indican que los realices con los sistemas netBeans (Propiedad de SUN microsistem, actualmente comprada por Oracle), Eclipse (personalmente es el que uso tanto en el trabajo como en casa) y en TextPad del cual no había escuchado hablar hasta que leí este libro

El codigo que se tiene que introducir es el siguiente:
public class HelloWorld{
public static void main (String[] argumentos){
System.out.print("Hola, mundo");
}
}
Una vez introducido este código lo podríamos ejecutar directamente desde eclipse o desde la consola, los resultados son los que se pueden ver en la imagen.



JAVA SE6 & Swing Capitulo 01 pag.12 Ej.3

0 comentarios

3. ¿Qué sucede al escribir la siguiente línea de ordenes?

javac -x

El resultado es el que se puede visualizar en las siguientes imagenes

JAVA SE6 & Swing Capitulo 1 Ejercicio 3

JAVA SE6 & Swing Capitulo 1 Ejercicio 3

JAVA SE6 & Swing Capitulo 01 pag.12 Ej.2

0 comentarios


2. ¿Qué sucede al escribir la siguiente línea de órdenes?

javac


Se pueden observar opciones diferente segun en el sistema operativo en el que se ejecute.

JAVA SE6 & Swing Capitulo 1 Ejercicio 2

JAVA SE6 & Swing Capitulo 1 Ejercicio 2

JAVA SE6 & Swing Capitulo 01 pag.11 Ej.1

0 comentarios


1. ¿Qué sucede al escribir la siguiente línea de ordenes?

Una vez introducido como resultado te da la versión de java que estas utilizando.
El ejercicio se vasa en cargar la línea de comandos y poner el comando “java –version” y el resultado es el siguiente
JAVA SE6 & Swing Capitulo 1 Ejercicio 1

Inicio de un proyecto

0 comentarios

El otro día un amigo me hablo de un proyecto, en realidad no es lo que me monte en la cabeza, la realidad es que el necesitaba un programa que gestionara unos clientes y sus tratamientos. Haciendo caso a un programa tan simple él tiene pensado hacerlo con Access ya que solo lo va a usar una persona.



Personalmente le daré apoyo pero en mi caso me di cuenta de una cosa, ya no me acuerdo como hacer programas de escritorio con Java, por lo que ni corto ni perezoso pensé que esta sería la mejor manera ya que todo quedaría mejor encapsulado y con una seguridad algo mayor, el problema aquí está en la base de datos ya que todas las que estoy acostumbrado a tocar necesitan o bien licencia por lo que el usuario tendría que pagar o bien instalaciones que no creo que el usuario quisiera asumir por lo que tras buscar un rato me encontré con la http://www.objectdb.com que es una especie de base de datos persistente, todavía no la he probado pero la cuestión es que ya tengo solucionada la parte de la base de datos.



JAVA SE6 & SwingEste es el libro que me llevara al "éxito" de este programa se lo recomiendo a todos los que quieran comenzar en el mundo de JAVA ya que es bastante actual y te da todas las nociones, desde un clásico "hola, Mundo!" hasta el programa ya terminado, la idea es seguir este libro hasta el final, haciendo todos los ejercicios pero, desde luego, derivándolo todo a la gestión de clientes que persigo para este proyecto.



Bueno, ya os iré informando de lo que vaya consiguiendo o de los problemas que vaya teniendo y las posibles soluciones que haya encontrado.
Posiblemente ire subiendo todos y cada uno de los ejercicios que plantea este libro, aunque no os puedo prometer nada.