Tutoriales

Clase String Java PRO II UVIGO

En Java no existe un tipo de datos primitivo que sirva para la manipulación de cadenas de caracteres. En su lugar se utiliza una clase definida en el API que es la clase String. Esto significa que en Java las cadenas de caracteres son, a todos los efectos, objetos que se manipulan como tales, aunque existen ciertas operaciones, como la creación de Strings, para los que el lenguaje tiene soporte directo, con lo que se simplifican algunas operaciones.

La clase String forma parte del package java.lang

Un String puede crearse como se crea cualquier otro objeto de cualquier clase; mediante el operador new:

String s = new String("Esto es una cadena de caracteres");

Los literales de cadena de caracteres se indican entre comillas dobles ("), a diferencia de los caracteres, que utilizan comillas simples (').

Sin embargo también es posible crear un String directamente, sin usar el operador new, haciendo una asignación simple (como si se tratara de un dato primitivo):

String s = "Esto es una cadena de caracteres";

Ambas expresiones conducen al mismo objeto.

Los Strings no se modifican una vez que se les ha asignado valor. Si se produce una reasignación se crea un nuevo objeto String con el nuevo contenido.

Además la clase String proporciona constructores para crear Strings a partir de arrays de caracteres y arrays de bytes.

Ejemplo Ver Código


Hacer un piano en Scratch

En este tutorial básico se explica como realizar un pequeño piano. Servirá para familiarizarse con la duplicación de objetos, la copia de bloques de un objeto a otro, así como el concepto de disfraces.

https://scratch.mit.edu/projects/136978593/

 

Puedes descargarte el pdf aquí.

Y el código solución aquí.

Piano Básico

Vamos a hacer un pequeño piano de tan sólo cuatro teclas que funcione con las flechas del teclado. Así cuando pulsemos una de las flechas, cambiará el color de la tecla y sonará una nota.

1. Piano básico

2. Piano sonando

 

¿Qué necesitamos?

1. Un objeto por cada tecla.

2. Dos disfraces por cada objeto.

 

¿Cómo lo hacemos?

Crear los objetos “TECLAS”

Vamos a crear nuestras propias teclas. Para ello vamos a tener que dibujarlas. Tenemos 2 opciones para este trabajo.

Opción A: (vamos a realizar esta opción con 2 de las teclas)

1º. Creamos un nuevo objeto que dibujaremos nosotros mismos.

2º. La manera más cómoda es utilizar la herramienta rectángulo. Haces uno con el borde en negro, y otro más pequeño dentro con relleno en blanco. Fíjate donde se escoge si quieres pintar el borde o el relleno.

También puedes cambiar el nombre de ese “disfraz” que por defecto se muestra como “disfraz1”.

Ahora haz clic con el botón secundario en la miniatura que tienes a la izquierda del área de dibujo. Y dale a “duplicar”. Así el siguiente disfraz tendrá el mismo tamaño. Pinta de gris clarito esta otra tecla.

3º. Ahora tendremos que duplicar nuestro objeto completo, con sus dos disfraces. Haremos clic con el botón secundario del ratón, encima del objeto.

 

4º. Ves que nos sobra el gato que aparece por defecto, por lo que lo eliminaremos. Puedes hacerlo de varias maneras, pero ahora lo haremos con el botón secundario sobre él, y diciéndole “borrar”.

5º. Una vez tengas los dos objetos “teclas” tendremos que empezar a programarlas.

 

Programar las TECLAS.

  • Queremos que cuando pulsemos una tecla del teclado suene una nota musical. También queremos que cambie la apariencia, es decir, que cambie el color de la tecla para indicar que está sonando. Intenta hacerlo tú sólo.
    1. Tendrás que buscar dentro de los bloque Eventos el bloque que indica que algo ha de comenzar cuando pulsamos una tecla del teclado.
    2. También vas a necesitar un bloque de Sonido, este puede ser un poco complicado de encontrar. Será el siguiente bloque:
    3. Ahora sólo nos falta hacer que cambie el disfraz. Recuerda como les has llamado. Por ejemplo, “difraz1” cuando se ve blanca, es decir, como si no estuviera pulsado en el piano, y la gris cuando se está pulsando, está sonando el piano.
  • Cuando tengas el programa de la primera tecla finalizado, lo único que tendrás que hacer es arrastrar ese programa encima de la otra tecla.

 

  • Dentro del segundo objeto tendremos que hacer un par de modificaciones. ¿Sabes cuales?
  • Para hacer las otras dos teclas, lo único que nos hace falta, es duplicar los objetos que ya tenemos. Esto los duplicará con los bloques y sus disfraces. Sólo tendremos que repetir las modificaciones del paso 3.
  • Ahora que ya tienes todo, confirma que el teclado funciona correctamente.

 

 


Enumerados en java PRO II UVIGO

Un enum,  tipo enumerado, es un tipo de dato definido por el usuario que solo puede tomar como valores los definidos en una lista.

[modificadores] enum nombreEnum {VALOR1, VALOR2, VALOR3, ...}
modificadores (opcional) puede ser public, private, protected además de static.
enum es la palabra reservada para definir enumeraciones en Java.
nombreEnum es el nombre del nuevo tipo creado.
VALOR1, VALOR2, ... son los valores que pueden tomar las variables que se declaren de este tipo.
Se pueden declarar enumeraciones dentro o fuera de una clase pero nunca dentro de un método.
public class Enum1{
public enum Dia {LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO}
public static void main(String []args){
Dia d; // declaramos una variable del tipo Dia
d = Dia.DOMINGO; //asignamos un valor
if (d == Dia.DOMINGO || d == Dia.SABADO) //comparamos valores
System.out.println("Estamos en fin de semana <if>");
else
System.out.println("Aun no ha llegado el fin de semana <else>");
d=Dia.VIERNES;
switch (d) { //ejemplo de switch
case LUNES:
case MARTES:
case MIERCOLES:
case JUEVES:
case VIERNES:
System.out.println("Aun no ha llegado el fin de semana <switch>");
break;
default:
System.out.println("Estamos en fin de semana");
}
}
}
En Java, los tipos enumerados se pueden definir fuera o dentro de una clase. Otra ventaja que traen los tipos enum de Java es que al ser una “especie de clase” podemos añadirles métodos, variables de instancia, constructores, etc… lo que los hace muy potentes.
/*
* Un tipo enumerado tiene sus propios metodos y constructor
*/
enum Vaso {
// Tipos de vaso disponibles. Pasan al constructor su capacidad en cc.
MAXI(500), TUBO(250), TERCIO(333), CANHA(200);
private int cc; // Variable interna donde almacenaremos la capacidad
// Nuestro constructor nos fuerza a pasar parametros al definir un nuevo tipo
Vaso(int cc) {
this.cc = cc;
}
// Devuelve la capacidad del vaso
public int getCentimetrosCubicos() {
return cc;
}
}
/*
* Definimos un tipo de bebida
*/
class BebidaCerveza {
enum MarcaCerveza {EstrellaGalicia, SanMiguel, Heineken} // Tipos enumerados sencillos. Solo tenemos estas marcas
private Vaso vaso;
private MarcaCerveza marca;
BebidaCerveza(MarcaCerveza marca, Vaso vaso) {
this.marca = marca;
this.vaso = vaso;
}
public void servir() {
System.out.println("Sirviendo " + vaso.getCentimetrosCubicos() + "cc. de cerveza " + marca);
}
}
/*
* Clase publica que prueba todo esto
*/
public class Enum2 {
public static void main(String[] args) {
BebidaCerveza birra = new BebidaCerveza(BebidaCerveza.MarcaCerveza.EstrellaGalicia, Vaso.MAXI);
birra.servir();
}
}

Crear nuestras propias excepciones Java PRO II UVIGO

Aunque Java proporciona una gran cantidad de excepciones, en algunas ocasiones necesitaremos crear excepciones propias.

import java.util.*;
public class Ejemplo1{

public static void main(String []args){
try {
int x=3;
System.out.println("Esto se sejecuta siempre");
if (x<4){
throw new Exception("Lanzo la Excepcion");
}
} catch(Exception e) {
System.out.println("Se produjo un excepcion: " + e.getMessage());
} finally {
System.out.println("Esto se ejecuta sin importar si se presentan errores");
}
}
}

Probar Código


Ejercicio de PRO II

1.- ¿Cuál es el resultado del siguiente programa?

class Programa1 {

public static void main(String [ ] args){

Clasex1 obj1=new Clasex1();

obj1.imprimir(4);

}

}

class Clasex1 {

int prop1=10,prop2=4;

public void imprimir(int i){

prop1=prop1+i;

prop2=prop2+i;

System.out.print(prop1+" "+prop2+" ");

}

}


Estructuras y Array de estructuras. Pro I UVIGO

En el siguiente ejercicio incorpora una función que permita calcular la longitud de la linea.

#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x;
int y;
} punto;
void pedirlinea(punto l[]);
void mostrarlineaa(punto l[]);
int main()
{
punto linea[2];
linea[0].x=10;
linea[0].y=2;
linea[1].x=20;
linea[1].y=20;
mostrarlineaa(linea);
pedirlinea(linea);
mostrarlineaa(linea);
return 0;
}
void pedirlinea(punto l[]){
int i;
for (i=0;i<2;i++){
printf("\ncoordenada x del punto %d de la linea ", i+1);
scanf("%d",&l[i].x);
printf("\ncoordenada y del punto %d de la linea", i+1);
scanf("%d",&l[i].y);
}
}
void mostrarlineaa(punto l[]){
int i;
for (i=0;i<2;i++){
printf("\ncoordenada x del punto %d de la linea es %d ", i+1, l[i].x);
printf("\ncoordenada y del punto %d de la linea es %d ", i+1, l[i].y);

}
}


Array como argumento de Funciones. Informática proI UVIGO

#include <stdio.h>
#include <stdlib.h>
void llenararray(int a1[], int x);
int main()
{
int a1[10],i;
llenararray(a1,10);
printf("numero de elementos del array: %d\n", ( sizeof(a1) / sizeof(a1[0]) ));
for (i=0;i<10;i++){
printf("%d ",a1[i]);
}
return 0;
}
void llenararray(int a1[], int x){
int i;
for (i=0;i<10;i++){
a1[i]=i+22*i;
}
// en la siguiente linea vemos com la misma función que en el main y la respuesta es diferente
printf("tamanho de una posicion del array: %d\n", ( sizeof(a1) / sizeof(a1[0]) ));
}


Ejercicio de funciones en c Informática UVIGO

Ejercicio de funciones. Solicitar dos números por teclado, y usando una función, que nos devuelva la media aritmética.

Ver compilación online.

#include <stdio.h>
/* Ejemplo con función sencilla pasamos dos variables a la función */
int main()
{

float media(float X, float Y);
/* Variables locales */
float A,B;

printf("Introduce dos numeros : ");
scanf("%f %f", &A, &B);
printf("La media aritmetica de %.2f et %.2f es %.4f\n",A, B, media(A,B));
return 0;
}

float media(float X, float Y)
{
return (X+Y)/2;
}

 


Ejemplos PRO I UVIGO

Visualización de números enteros, Octal , Hexadecimal...

Formas de Ajustar la salida printf según formato.

Compilación

#include <stdio.h>

int main()
{
int entero = 1234;
int enteroNeg = -1234;
float real = 234.567;
char letra = 'E';
int contador;

printf("El número entero vale %d en notación decimal,\n", entero);
printf(" y %o en notación octal,\n", entero);
printf(" y %x en notación hexadecimal,\n", entero);
printf(" y %X en notación hexadecimal en mayúsculas,\n", entero);
printf(" y %ld si le hacemos que crea que es entero largo,\n", entero);
printf(" y %10d si obligamos a una cierta anchura,\n", entero);
printf(" y %-10d si ajustamos a la izquierda.\n", entero);
printf("El entero negativo vale %d\n", enteroNeg);
printf(" y podemos hacer que crea que es positivo: %u (incorrecto).\n",
enteroNeg);
printf("El número real vale %f en notación normal\n", real);
printf(" y %5.2f si limitamos a dos decimales,\n", real);
printf(" y %e en notación científica (exponencial).\n", real);
printf("La letra es %c y un texto es %s.\n", letra, "Hola");
printf(" Podemos poner \"tanto por ciento\": 50%%.\n");

return 0;
}

 


Ejercicios Escuela Informática UVIGO III

Practica 4 Ejercicio 3

Comprobar código 

#include <stdio.h>

//Practica 4 Ejercicio 3. Codificar un algoritmo que solicite un número entero N y calcule los N primeros términos
//de la serie de Fibonacci, y los muestre por pantalla.

int main()
{
int n;
printf("Dame un numero\n");
scanf("%d",&n);
int i, p=0,s=1,u;
for (i=1;i<n;i++){
u=s+p;
p=s;
s=u;
printf("%d\n",u);
}
return 0;

}


Ejercicios Escuela Informática UVIGO

Práctica 2 Ejercicio 4

Crear un nuevo proyecto con un programa que calcule el perímetro y el área de una circunferencia a partir de su radio, que debe ser un dato que se pida al usuario. Para ello, definir una constante en el programa para el valor de PI, y variables de tipo real para recoger
el valor del radio, calcular el perímetro y el área. Comprobar que funciona. ¿Qué ocurre si se cambia el tipo de las variables para el perímetro y el área por int ?

Pruebalo en un compilador online

#include <stdio.h>

int main()
{
const float pi=3.14;
float radio, perimetro, area;
printf("Introduce el Radio de la Circunferencia: ");
scanf("%f",&radio);
perimetro=2*pi*radio;
area=pi*radio*radio;
printf("El perímetro es: %3.3f\n", perimetro);
printf("El Area del círculo es: %3.2f\n",area);

return 0;
}

%3.2f se indica para el número de decimales.

Se prodría poner %f

Si cambiamos perimetro y area tipo integer no funciona


Ejercicio PRO I Informática uvigo

Práctica 4 Ejercicio 10. Calcular el mayor y el menor de una serie de números introducidos por teclado. Solución pidiendo un número por lo menos. Modificar el programa para que pregunte si no quiero introducir números.

#include <stdio.h>
/* Práctica 4 Ejercicio 10. Calcular el mayor y el menor de una serie de numeros introducidos por teclado.
*/
int main()
{
int mayor, menor;
int x;
printf("dame el primer numero\n");
scanf("%d",&x);

menor=x; //Variable para almacenar el mayor. Inicialmente el primero tecleado
mayor=x; //Variable para almacenar el menor. Inicialmente el primero tecleado

do{
printf("dame otro numero o cero para terminar\n");
scanf("%d",&x);
if (x>mayor && x!=0){

//Comprobar si el introducido es menor que el menor del los introducidos hasta ahora y es distinto de //cero
mayor=x;
}
if(x<menor && x!=0){

//Comprobar si el introducido es menor que el menor del los introducidos hasta ahora y es distinto de //cero
menor=x;
}
}
while (x!=0);
printf("El mayor es :%d \n",mayor);
printf("El menor es :%d \n",menor);
return 0;
}


Ejercicios Escuela Informática UVIGO II

Práctica 3 Ejercicio 6

Escribir un programa que solicite un carácter y dos números reales al usuario.
● Si el carácter es “ + ”, el programa devolverá la suma de los dos números introducidos...........

Solución: Ver en Compilador online

#include <stdio.h>

int main()
{
float a,b;
char c;
printf("Que operación quieres realizar\n");
scanf("%c",&c);
while (!(c=='+'||c=='-'||c=='*'||c=='/'))
{
printf("Operacion no valida");
scanf("%c",&c);
}
getchar();
printf("Dame un número \n");
scanf(" %f",&a);
printf("Dame el otro número \n");
scanf("%f",&b);
switch (c){
case '+':
printf("La suma es %f \n",a+b);
case '-':
printf("La resta es %f \n",a-b);

case '*':
printf("La multiplicación es %f \n",a*b);

case '/':
{
if (b!=0)
printf("La division es %f \n",a/b);
else
printf( "La division no puede realizarse\n");
}
}
return 0;
}


Genericos en java

¿Por qué utilizar los genéricos?

En pocas palabras, los genéricos permiten tipos (clases e interfaces) para ser definidos como los parámetros de clases, interfaces y métodos.

Al igual que los parámetros formales  utilizados en las declaraciones del método, los parámetros de tipo proporcionan una forma para que se pueda volver a utilizar el mismo código con diferentes entradas.

La diferencia es que las entradas a los parámetros formales son los valores, mientras que las entradas para escribir parámetros son tipos.

Los nombres de los parámetros tipo más comúnmente utilizados son:

  • E - Elemento (muy utilizada por la Java Collections Framework)
  • K - Key
  • N - Número
  • T - Tipo
  • V - Valor

package genericos3;

public class Visualizar <T>{

private T objeto;

public Visualizar(T objeto) {

this.objeto = objeto;

}

public void setObjeto(T objeto) {

this.objeto = objeto;

}

public T getObjeto() {

return objeto;

}

public void imprimir() {

System.out.println(objeto.toString());

}

public void imprimir_reves() {

StringBuffer sb = new StringBuffer(objeto.toString());

System.out.println(sb.reverse());

}

}

package genericos3;

public class Genericos3 {

public static void main(String[] args) {

Visualizar <String> impStr = new Visualizar<String>("Hola Alumnos del Mundo");

impStr.imprimir();

Visualizar <Integer> impInt = new Visualizar<Integer>(143);

impInt.imprimir_reves();

}

}


Clases de apoyo Ciclos Informática y Universidad

clasesParticulares

Con profesorado especializado y con años de experiencia.

Preparación de ciclos formativos.

Flexibilidad de horarios.

Prepárate a tú ritmo con clases personalizadas. También disponemos de grupos.

Ponte en contacto con nosotros para cualquier duda.