Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - dongo

Páginas: 1 2 3 4 5 [6] 7 8 9
101
Hoy me has cogido con ganas de escribir. Te comento cosas que he ido viendo:

Punto 1 clase legislador:
 
Es recomendable usar siempre la estructura:
Código: [Seleccionar]

[modificador de acceso] [abstract] {class | interface | enum} NombreClase [extends + ClasePadre] [implements + Interfaz1,...,interfazN]{...}
por ejemplo:

Código: [Seleccionar]
public abstract class VehiculoPolicia extends Vehiculo implements Serializable,Cloneable{...}
En tu caso, has cambiado el orden y has echo:

Código: [Seleccionar]
abstract public class Legislador extends Persona{ ... }

Como comento, se recomienda el modificador de acceso primero.

Punto 2 sobre las clases Repite, Centrar, Enmarcar, Mensa.

Creo que todas tienen métodos similares y ademas veo que las vas usando de un proyecto a otro, no te sería mas sencillo crear una clase llamada por ejemplo... UtilConsola y arrejuntar ahí todas estas funciones y cuando quieras hacer uso de alguno de sus métodos solo tendrás una clase para manejar y no 5 distintas...?? no se, es algo que yo haría.

Por otro lado la clase Repite es exactamente igual que el método repite de la clase Enmarcar. Existen una  serie de principios en el ámbito de la programación y uno de los mas básicos es el principio DRY(Dont repeat yourself), viene a decir que no te repitas a ti mismo.
Entre estas dos clases, no se cumple este principio, por tanto creo que uno de los dos métodos te sobra.

Esta bien estas clases útiles que te estas creando, pero creo que deberías darles un repaso y aglutinar los métodos similares en una misma clase, ademas por lo que veo son todas con métodos static, por lo que aglutinarlas como te digo en una clase UtilConsola o algo así, te facilitaría saber si estas repitiendo código o funcionalidad como te esta pasando ahora.

La clase Per, que supongo es para calcular un porcentaje...Veo que la usas tanto para diputados como para senadores, y supongo que has creado la clase con intención de usarla en el futuro, Si es así deberías ponerle un nombre mas definido por ejemplo(UtilMatematicas) y ahí empezaras a crear funciones que te puedan resultar útil a lo largo de tu vida de desarrollador. La verdad ejk Per... nose, jaja.

Punto 3 en la clase Persona, me encuentro esto:

Código: [Seleccionar]
public void mostrarDatos() {
        String nombre = "Nombre: ",apellidos = "Apellidos: ",edad = "Edad: ";
        System.out.println(Repite.charNum(' ',40-nombre.length())+nombre+this.nombre);
        System.out.println(Repite.charNum(' ',40-apellidos.length())+apellidos+this.apellidos);
        System.out.println(Repite.charNum(' ',40-edad.length())+edad+this.edad+" años");
    }
    public String toString() {
        Integer datoEdad = edad;
        return "-Nombre: ".concat(nombre).concat(" -Apellidos: ").concat(apellidos).
        concat(" -Edad: ").concat(datoEdad.toString());
    }

A ver te explicaré algo que no se si sabrás, toString() es un método especial que se hereda de la clase Object(Clase padre de todas), cuando lo escribes en una clase, lo estas sobrescribiendo de la clase Object o alguna otra intermedia, por tanto debería tener anotación @Override. Al margen de esto como te decía es un método especial que se invoca cuando intentas imprimir por pantalla,escribir a un fichero,... Un objeto de ese tipo al que le has implementado el método toString().

Un ejemplo: Tenemos tu clase persona, pues te creare una clase TestPersona para que entiendas de lo que te hablo.

 
Código: [Seleccionar]
public class TestPersona {
    public static void main(String[] arg ){
        Persona p1=new Persona("pepe","gonzalez",55);
        System.out.println(p1);
       
    }
}
 
   
 Y la salida que se obtiene:
 
 
Código: [Seleccionar]
run:
-Nombre: pepe -Apellidos: gonzalez -Edad: 55
BUILD SUCCESSFUL (total time: 0 seconds)
 

 Si te fijas lo que he echo, es imprimir directamente una variable persona, y que es lo que ha pasado? Pues que automáticamente java ha buscado en la clase Persona si existía el método toString(), al existir, lo ha invocado y ha mostrado por pantalla el String que devuelve este método.
 
 Si no lo hubiera encontrado, habría ido a la clase padre a buscarlo. Por ejemplo si creo un objeto de tipo Diputado y lo intento imprimir por pantalla como no tiene método toString, va a la clase padre(Legislador) a buscarlo, como tampoco lo tiene va a su clase padre(Persona) y aquí lo encuentra, lo invoca, y se muestra por pantalla, por tanto si hacemos:
 
 
Código: [Seleccionar]
public class TestPersona {
    public static void main(String[] arg ){
       
        Diputado dip= new Diputado("pepe","gonzalez",55,"cadiz");
        System.out.println(dip);
    }
}
 
La salida por pantalla sera la misma que si fuera una persona:
 
Código: [Seleccionar]
run:
-Nombre: pepe -Apellidos: gonzalez -Edad: 55
BUILD SUCCESSFUL (total time: 0 seconds)
 

Por tanto con lo que tu has echo de escribir el método toString y ademas el mostrarDatos(), rompe de nuevo con el principio DRY, por eso te recomiendo solo que te curres el método toString() y lo uses para imprimir datos de una persona o legislador, o el objeto para el que tu quieras poder imprimirlo directamente.Por lo que yo modificaría tu clase persona para que quedara de la siguiente forma el método toString() y nos ahorraríamos el mostrar datos.
 

Código: [Seleccionar]
@Override
 public String toString() {
        String nombre = "Nombre: ",apellidos = "Apellidos: ",edad = "Edad: ";
        String cadena=Repite.charNum(' ',40-nombre.length())+nombre+this.nombre+"\n"
                +Repite.charNum(' ',40-apellidos.length())+apellidos+this.apellidos+"\n"
                +Repite.charNum(' ',40-edad.length())+edad+this.edad+" años";
               
        return cadena;
    }

Y con esto obtendrías la misma salida que con el método mostrarDatos(). De esta manera con un simple "System.out.println(variable_tipo_persona);" se imprimiría por pantalla el objeto de tipo persona con el formato que tenia en el mostrarDatos().

nota:En caso de necesitar disponer de distintos formatos de impresión, entonces si habría que crear distintos métodos para los distintos formatos. Y entonces lo tuyo si estaría bien.

Punto 4

En mi opinión, creo que si ordenaras un poco mas las cosas podrías crear cosas mas eficientes, por ejemplo el método buscar de la clase ListinLegislador. Creo que no deberia ser tan intrincado, yo por ejemplo crearía un método que devolviera un nuevo arrayList con los elementos encontrados en la búsqueda(Si puede haber mas de 1) o un objeto de tipo legislador(si solo puede haber 1) y con ese array o variable mostrar los resultados, pero eso de mezclar: "entrada de consola- proceso de búsqueda- salida por consola y tratamiento de resultado" en un mismo método no es muy recomendable.

Yo tendría por ejemplo:
 
  • Un método que obtenga la entrada de teclado del usuario(datos para realizar la búsqueda).
  • Otro método que generara un nuevo arraylist con los resultados de la búsqueda de acuerdo a ciertos parámetros.
  • Y otro método que reciba un parámetro(arraylist que será el devuelto por el método anterior).Este método se encargara de generar la salida y tratar la interacción con el usuario .

 Intentar modularizar en distintos pasos, sin pasarse tampoco... No es cuestión de tener 300 métodos cada uno para una instrucción...XDD pero si es recomendable intentar separar las distintas fases de una acción. En el caso que te explicado anteriormente, las fases podrían ser:

 
  • Obtener los datos para la búsqueda.
  • Realizar la búsqueda.
  • Tratar el resultado.
Es recomendable hacer esto por claridad y dar posibilidad a poder REUTILIZAR CÓDIGO. Imagina que  te has currado este programa para una empresa, y al mes de entregarlo, tu jefe te dice: Oye que ahora en lugar de trabajar a través de la consola, queremos la misma funcionalidad pero en un JFrame(Ventana). Pues en este caso tendrías que crear otro método buscar totalmente diferente desde cero, ya que el que tu tenias estaba echo solo para consola.

Ahora imagina que habías realizado esta separación que te he comentado, pues si lo hubieras echo, el método buscar te lo ahorrarías ya que el anterior te vale, solo tendrias que modificar los métodos para obtener los datos para la búsqueda y el método para tratar el resultado a través de una interfaz gráfica, pero el método buscar seguiría siendo el mismo. Esto es simplemente un ejemplo, y al principio cuesta el separar las funciones pero poco a poco te irás acostumbrando.

Punto 5   
 
En cuanto a tu clase validador, jeje esta bastante bien, "modo javascript onkeypress ON" XDD. te escribo una alternativa a tus métodos para que veas una forma rápida y fácil de validar. Hace uso de bloques try-catch, pero tampoco tienen mucha complicacion, simplemente intento convertir la cadena a int o float, si se convierte bien, es que la cadena era un numero valido y devuelve true. Si no se convierte, se lanza la excepción NumberFormatException y entonces se devuelve false. Como ves te ahorras bastantes if y bucles...
 
Código: [Seleccionar]
public class ValidadorNumero {
    public static boolean validarNumeroEntero(String numero){
        try{
            int n=Integer.parseInt(numero);//intento convertir cadena a entero
            return true; //Si se consigue
        }
        catch(NumberFormatException e){
            return false; //Si no se consigue
        }
    }
    public static boolean validarNumeroEntero(String numero,int valorInicial, int valorFinal){
        try{
            int n=Integer.parseInt(numero); //intento convertir cadena a entero
            if(n>valorFinal || n< valorInicial){
                throw new NumberFormatException("numero fuera de rango"); //Si esta fuera de rango, lanzo una excepcion NumberFormatException
            }
            return true; // si se consigue y el numero esta en el rango
        }
        catch(NumberFormatException e){
            return false; //Si no se consigue o el numero no esta en el rango
        }
    }
    public static boolean validarFloat(String numero){
        try{
            float n=Float.parseFloat(numero);//intento convertir cadena a float
            return true; //Si se consigue
        }
        catch(NumberFormatException e){
            return false; //Si no se consigue
        }
    }
    public static void main(String[] arg){
        System.out.println("          Validando enteros:");
        System.out.println("1331231 es entero: "+validarNumeroEntero("1331231"));
        System.out.println("sgf231 es entero: "+validarNumeroEntero("sgf231"));
         System.out.println("          Validando enteros con rangos 0-100:");
        System.out.println("12 es entero entre 0 y 100: "+validarNumeroEntero("12",0,100));
        System.out.println("155 es entero entre 0 y 100: "+ validarNumeroEntero("155",0,100));
        System.out.println("          Validando floats:");
        System.out.println("12.35 es float: "+validarFloat("12.35"));
        System.out.println("12..5 es float: "+validarFloat("12..5"));
    }
}
Como ves, de esta forma ahorras muchas operaciones al procesador y sobre todo te ahorras mucho código. Por cierto, en tu clase Validador vuelves a romper con el principio DRY en los métodos:
  • public static int entero (String entrada, int valorInicial, int valorFinal) {
  • public static int entero (String entrada) {
En el método "public static int entero (String entrada, int valorInicial, int valorFinal) {" podrias haber echo uso del otro método de esta manera:

Código: [Seleccionar]
public static int entero (String entrada, int valorInicial, int valorFinal) {
int entero = Validador.entero(entrada);
if (entero < valorInicial || entero >= valorFinal) {
return valorInicial - 1;
}
else{
return entero;
}
}
   
 
 Te hubieras ahorrado hacer 2 métodos prácticamente iguales como te ha pasado. A veces perder 30 minutos en la planificación de un ejercicio, ahorra 1 hora en el desarrollo del mismo... XDD
 
Y nada ahí tienes para entretenerte, aburrirte y todo lo que quieras y aun así seguro que me dejo algo detrás. Aunque veas que escribo mucho, comentarte que en general tu ejercicio esta bien, y todo lo que te comento son simples recomendaciones para mejorar el orden, eficiencia y claridad. Si no entiendes alguna cosilla ya sabes que por aquí andamos, Un saludo.

102
hola, buenas... le he metido a tu programa una serie de lineas de depuración para ver que iba pasando y no le veo lógica a las operaciones que va realizando el procedimiento. Incluso conforme va avanzando, el array resultante no tiene nada que ver con el de origen...XDD.

Yo intentaría replantear bien el ejercicio, puedes siempre buscar algun algoritmo de ordenación y aplicarlo... para que reinventar la rueda....(http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja)

Y nada, te paso tu ejercicio modificado con las lineas que yo e he incluido para que veas...

Código: [Seleccionar]
// Ejercicio 7.24: Ordenamiento Quicksort //

#include <stdio.h>
#include <iostream>




void quicksort ( int arreglo[], int tamanio, int inicio, int fin);
void intercambio (int *ptr1, int *ptr2);
void particion (int arreglo[], int tamanio, int izq, int dcha);

main()
{
    int i;
    int arreglo [10] = {37,2,6,4,89,8,10,12,68,45};

    printf("Arreglo desordenado\n\n");
    for(i = 0; i < 10; i++)
    {
        printf("%d ", arreglo[i]);
    }

    quicksort(arreglo, 10, 0, 9);

    printf("\n\nArreglo ordenado\n\n");

    for(i = 0; i < 10; i++)
    {
        printf("%d ", arreglo[i]);
    }
    printf("Fin DEl Programa");
    system("pause");
    return 0;
}

void quicksort( int arreglo[], int tamanio, int inicio, int fin)
{
    int i,n, elemento, lim_elemento;

    if (inicio >= fin )
    {
        return;
    }

    else
    {
        for (i = fin; arreglo[i] > arreglo[inicio]; i--)
        {
           ;
           
        }
        printf("\n  intercambio %d por %d",arreglo[inicio],arreglo[i]);
        system("pause");
        intercambio(&arreglo[inicio], &arreglo[i]);
        elemento = i;

        for (i = inicio; arreglo[i] < arreglo[elemento]; i++)
        {
            ;
         
        }
        printf("\n  intercambio %d por %d",arreglo[elemento],arreglo[i]);
        system("pause");
        intercambio(&arreglo[elemento], &arreglo[i]);
        lim_elemento = elemento;
        elemento = i;

        for (i = lim_elemento-1; arreglo[i] > arreglo[elemento]; i--)
        {
            ;
        }
        printf("\n intercambio %d por %d",arreglo[elemento],arreglo[i]);
        system("pause");
        intercambio(&arreglo[elemento], &arreglo[i]);
        lim_elemento = elemento;
        elemento = i;

        for (i = lim_elemento+1; arreglo[i] < arreglo[elemento]; i++)
        {
            ;
        }
        printf("\n  intercambio %d por %d",arreglo[elemento],arreglo[i]);
        system("pause");
        intercambio(&arreglo[elemento], &arreglo[i]);
        lim_elemento = elemento;
        elemento = i;

        for(n=0;n<=9;n++){
            printf("%d ",arreglo[n]);
        }
        system("pause");
        //printf("\n%d\n\n", i);
        particion(arreglo, 10, 0, elemento -1);
        particion(arreglo, 10, elemento + 1, 9);
       

    }
}

void particion (int arreglo[], int tamanio, int izq, int dcha)
{
    quicksort(arreglo, 10, izq, dcha);
}

void intercambio (int *ptr1, int *ptr2)
{
    int temp;
    temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

103
Aprender a programar desde cero / Re:Ejercicio CU00632B
« en: 20 de Agosto 2014, 12:49 »
Hola me gustaría aportar una cosilla... Como bien ha comentado Cesar, esto de llamar set a los métodos modificadores y get a los consultores se produce por consenso, y debido a esto, hay muchos frameworks, como JSF(java server faces), hibernate, spring, etc que hacen uso de esta filosofía, y mediante técnicas de introspección(http://es.wikipedia.org/wiki/Introspecci%C3%B3n_de_tipos) llaman a estos métodos para crear objetos en tiempo de ejecución.

Por tanto, es importante que te acostumbres a usarlo ahora con estas convenciones, por que en el futuro en algunos casos si te será necesario disponer de estos métodos con estos nombres.

Y nada un saludo!   

104
A ver para hacer un tipo enum, debes crear un archivo .java  cuyo nombre será el mismo que el tipo enum y que contendrá:

Código: [Seleccionar]
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY ;
     public static Day getFirstDay(){
        return Day.MONDAY;
    }
}


Solo contendrá el nombre del paquete, la definición del tipo enum(Sin palabra class por ningún lado) , Rango de valores, métodos. El fichero deberá llamarse igual que el tipo enum, en este caso sería Day.java

Posteriormente un ejemplo de uso del tipo enum, podría ser el que sigue:

Código: [Seleccionar]
public class TestEnum {
    Day day;
       
    public void setDay(Day param){
      this.day=param; 
    }
    public static void main(String[] args) {
        TestEnum dia=new TestEnum();
        dia.setDay(Day.SUNDAY);
        System.out.println(dia.day);
        System.out.println(Day.getFirstDay());
    }
}

Y nada, te recomiendo lo intentes de nuevo separando el tipo enum en un fichero aparte y con sus propios métodos, el IDE que estés usando, no debe ser determinante para esto. Y nada un saludo!

105
Hola, el error esta en linea 103, 104, 121 y 122 en lugar de:
Código: [Seleccionar]
isdigit(cedula);
 
debes hacer segun tu código:
 
Código: [Seleccionar]
isdigit(cedula[i]);
 

 Es el mismo error repetido 4 veces.

106
Hola buenos dias, pues sinceramente yo tampoco lo se compi, te estado siguiendo en ambos post con las respuestas de Mario( por cierto Mario, gracias por coger la pelota) y tampoco he sido capaz de detectar los fallos que se te estaban produciendo...

La verdad que yo te recomendaría, hagas varios formularios y trastees las distintas formas... con method get, method post, con las funciones date_create, date, date_format, .... Y ver si eres capaz de detectar posibles cosas que te puedan estar pasando.

Sinceramente, con lo poco que yo he trabajado con fechas, siempre las he tratado como una cadena de texto y una vez en bbdd, he usado el Gestor de BBDD para tratarlas(formato, cálculos entre fechas, ordenacion, etc).

Otra cosa que puedes probar, es lo que te comente del:

<input type="date" name="fecha_inicio" />

con esto le facilitaras mucho al usuario el poder insertar una fecha concreta ya que sale una especie de calendario gráfico...

Como te decía yo siempre he tratado las fechas como cadenas de texto:
Código: [Seleccionar]
$fecha_inicio= $_GET['fecha_inicio'];
$fecha_partida=explode("/",$fecha_inicio );
$dia= $fecha_partida[0];
$mes= $fecha_partida[1];
$anio= $fecha_partida[2];
echo $dia."/".$mes."/".$anio;

la función explode corta una cadena de texto por un carácter o cadena concretos...

Hay muchos caminos para llegar a lo mismo, quizá con el tiempo des con la tecla del error que te tiraba, yo sinceramente no lo he visto.

Otro consejo, te recomiendo utilices method="post", no creo ke esto pueda ser la causa, pero ofreceras seguridad a tu sitio, a la par q urls mas limpias.

Y bueno esto que te pasa no será la primera ni la ultima,  creo que a todos nos han podido pasar cosas de este tipo, y bueno como te digo hay mil formas de resolver un problema, si de una manera no te funciona, intenta buscar una alternativa.

Por cierto, si se te da bien java, estudia algo de JSP, es como php pero con código java y tiene mucho juego.

Y nada tio no te preocupes que cosas así nos han pasado a todos, un saludo!

107
Esta bien, como en ejercicios anteriores, ofreces un 200% mas de lo que se pide, y eso esta muy bien, aun así te haré un par de puntualizaciones:

- La primera, es que la próxima vez aparte de adjuntar el código, para que  se pueda repasar directamente, intenta adjuntar también los ficheros, así nos costara menos probarlo ;).

- La segunda es recomendarte el uso de anotaciones, en java, existe una serie de anotaciones para indicar que es lo que  viene a continuación. En este caso te enseñaré la anotación @Override esta anotación se usa para indicar que un método será sobrescrito, se escribe justo antes del método que será sobrescrito( ver ejemplo).

Código: [Seleccionar]
public class Circulo extends Figura{             

    //Constructor para objetos de la clase Circulo
    public Circulo(float dimensionPrincipal) {           
        super(dimensionPrincipal);
    } // Fin del constructor Circulo
    public float calcularArea() {
        float radio = super.dimensionPrincipal;
        return radio * radio * (float)Math.PI;
    }
    // No se sobreescribe el método toString(), se usará el de la clase padre.

    // El atributo 'dimensionPrincipal' es accesible por declararse 'protected' en la clase padre
    public String mostrarDatos() {
        return super.toString() + " Area: " + calcularArea();
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Circulo) {
            Circulo tmpCirculo = (Circulo)obj;
            if (super.dimensionPrincipal == tmpCirculo.dimensionPrincipal) { return true; }
            else                                                           { return false; }
        } else                                                             { return false; }
    }
} // Fin de la clase Circulo

Si te fijas, justo antes de la definición del método equals, e añadido la anotación @Override, esto simplemente es como una aclaración de que ese será un método sobrescrito de la clase padre. 

Por cierto, veo que ya vas metiendo comentarios para los javadoc, esta bien eso, para que vayas aprendiendo.

Y bueno no se si alguien tendrá algo más que decir... De momento esto que te comento es lo que he visto, esta currado, funciona bien y separas las distintas funciones. Muy bien, a ver si empiezas ya con cositas que den mas juego... ficheros, bases de datos, ....

Bueno un saludo y a seguir para adelante. 
 

108
Aprender a programar desde cero / Re:principiante en java
« en: 14 de Agosto 2014, 12:08 »
Bueno si estas empezando con java... Creo que no has empezado por un buen sitio. Y no se,  pero si de verdad tienes intención de aprender, deberías empezar desde el principio y al menos escribirnos los intentos que has echo para ver donde esta el posible fallo y así poder guiarte, con lo que nos escribes, no tengo por donde empezar. Si quieres que te lo explique dinos en que exactamente tienes dudas. De esta manera, simplemente lo que puedo hacer es hacértelo....

Aparte de mi retaila(lo siento pero soy así), tu pregunta es un poco ambigua, que tipo de ficheros quieres copiar? uno binario(por ejemplo una  imagen), uno de texto... dependiendo si es uno u otro se leerá o escribirá el fichero de una forma distinta...Te pondré un ejemplo de ambos, pero no te acostumbres... ;) Cuando tengas alguna duda, escríbenos tus intentos, explícanos donde te falla, que problemas tienes, etc...

Fichero de texto:

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class CopiaFicheroTexto {
    public static void main(String[] arg){
        String rutaFichOrigen="E:\\ejemplo\\fichero_ejemplo.txt";//Ruta al fichero de origen
        String rutaFichDestino="E:\\ejemplo\\copia_fichero_ejemplo.txt"; //Ruta al fichero de destino
        File ficheroOrigen=new File(rutaFichOrigen);//Creamos objeto de tipo fichero con la ruta origen.
        File ficheroDestino=new File(rutaFichDestino);//Creamos objeto de tipo fichero con la ruta destino.
        BufferedReader lectorFichero;//Creo un objeto buffer de lectura.
        BufferedWriter escritorFichero;//Creo un objeto buffer de escritura.
        try{
            lectorFichero=new BufferedReader(new FileReader(ficheroOrigen));//Inicializa el buffer de lectura con un objeto de tipo FileReader(lector de fichero).
            escritorFichero=new BufferedWriter(new FileWriter(ficheroDestino));//Inicializa el buffer de escritura con un objeto de tipo FileWriter(escritor de fichero).
            String linea;//variable ke ira conteniendo la linea ke leemos para despues escribirla
            while((linea=lectorFichero.readLine())!=null){ //mientras haya lineas...
                escritorFichero.write(linea+"\n");//Escribe la linea al fichero destino
                System.out.println(linea);//se imprime la linea copiada por consola
            }
           
            lectorFichero.close();//cerramos el lector
            escritorFichero.close();//cerramos el escritor
        }
        catch(FileNotFoundException e){
            e.printStackTrace();//traza de excepcion
           
        }
        catch(IOException e){
            e.printStackTrace();//traza de excepcion
        }
    }
}

Fichero binario(imagen, exe, pdf, doc, odt, ...):

Código: [Seleccionar]
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class CopiaFicheroBinario {
    public static void main(String[] arg){
        String rutaFichOrigen="E:\\ejemplo\\imagen.png";//Ruta al fichero de origen
        String rutaFichDestino="E:\\ejemplo\\copia_imagen.png"; //Ruta al fichero de destino
        File ficheroOrigen=new File(rutaFichOrigen);//Creamos objeto de tipo fichero con la ruta origen.
        File ficheroDestino=new File(rutaFichDestino);//Creamos objeto de tipo fichero con la ruta destino.
        BufferedInputStream lectorFichero;//Creo un objeto flujo buffer de lectura .
        BufferedOutputStream escritorFichero;//Creo un objeto flujo buffer de escritura.
        try{
            lectorFichero=new BufferedInputStream(new FileInputStream(ficheroOrigen));//Inicializa el buffer de lectura con un objeto de tipo FileInputStream(Flujo de entrada a fichero).
            escritorFichero=new BufferedOutputStream(new FileOutputStream(ficheroDestino));//Inicializa el buffer de escritura con un objeto de tipo FileOutputStream( flujo de salida a fichero).
            int bytes;//variable ke ira conteniendo el byte a copiar en cada momento.
            while((bytes=lectorFichero.read())!=-1){ //mientras no llegue a fin de fichero...
                System.out.println((char)bytes);//se imprime el byte a copiar convertido a caracter por consola(no tiene sentido)
                escritorFichero.write(bytes);//se copia el flujo de bytes al fichero destino.
            }
           
            lectorFichero.close();//cerramos el lector
            escritorFichero.close();//cerramos el escritor
           
        }
        catch(FileNotFoundException e){
            e.printStackTrace();//traza de excepcion
           
        }
        catch(IOException e){
            e.printStackTrace();//traza de excepcion
        }
    }
}

Bueno, ahí tienes un ejemplo de cada uno, como te digo, si pretendes entenderlo sin tener una buena base, será complicado y bueno intenta la próxima vez hacer algo... XDD Un saludo!

nota: En las dos primeras lineas tras el main en ambos ficheros es donde debes modificar la ruta  de acuerdo al fichero origen y fichero destino que quieras copiar dentro de tu pc.

109
Hola lo he estado probando y esta bastante bien, simple y elegante al mismo tiempo, ademas combinas los distintos tipos de for, cosa que esta muy bien porque así te acostumbras a usar ambos. No se si recuerdas hace unos días te dí una explicación sobre como convertir un array estático a uno dinámico con el método:

Código: [Seleccionar]
ArrayList<String> listaDeMesesDinamica=new ArrayList<>(Arrays.asList(listaDeMesesEstatica));

quizá podrías intentar realizar una variación de este ejercicio haciendo uso de este método, con lo que te ahorrarías tener que recorrer todos los elementos para hacer la copia.

Pero vamos el ejercicio esta completamente bien. Simplemente para que vayas practicando distintas formas de hacer lo mismo.Bueno un saludo!

110
Que cadena de texto pones tu en el campo de fecha inicio, te paso un par de capturas.... a mi me funciona bien con PHP Version 5.4.4-14+deb7u12 en debian, quizá sea la versión.... 

La cosa es  que a mi me funciona bien....Te paso una referencia a todas las funciones de fecha y hora en php y a ver si te puedes pelear con la documentación y encontrar algo que te funcione, como te dije anteriormente hay muchas formas de hacer lo mismo y si te fijas en la lista de funciones que te paso, hay muchas que hacen lo mismo....

http://php.net/manual/es/ref.datetime.php

Como te digo, de las formas que te puse a mi me funcionan, a ver si un maki en php nos saca de la duda....Bueno un saludo y siento no haberte podido ayudar mas.



 

111
Antes de nada, no entiendo para que quieres realizar esas conversiones, la pagina script.php, solo se encargará de meter la información en la bbdd, no?

Pues si solo se encarga de eso, veo innecesario las conversiones que buscas realizar. Las conversiones las harás en la pagina donde le muestres la info al usuario, pero yo creo que no te es necesario realizarlas en este fichero script.php.

De todas maneras, si añades estas lineas a tu fichero script veras la manera en que se realiza la conversión, hay muchas formas de hacer esto, te presento dos formas de hacerlo:

La primera:

Código: [Seleccionar]
$fecha1= date("m-d-Y", strtotime("$fecha_inicio"));
echo $fecha1."<br>";
$fecha2=date("Y-m-d",strtotime($fecha1));
echo $fecha2;

La segunda:

Código: [Seleccionar]

$fecha1 = date_create($fecha_inicio);
$fecha2= date_format($fecha1, 'm-d-Y');
echo $fecha2."<br>";
$fecha3=date_create($fecha2);
$fecha4=date_format($fecha3,'Y-d-m');
echo $fecha4;

Añade eso a tu código y mira a ver si te vale. Como ya te digo, hay muchas formas de hacerlo, no creo que ninguna de estas dos formas sea la mas correcta, pero funcionan....

Haber si alguien con mas experiencia en php nos ilustra con alguna forma mas adecuada de hacerlo, de momento creo que esto te puede valer, bueno un saludo.

Nota: tambien puedes usar input de tipo date en lugar de los tipo text, no es compatible con todos los navegadores, pero poco a poco se va integrando.

ejemplo:
Código: [Seleccionar]
<input type="date" name="fecha_inicio" value="">   

112
Pues eso es lo que yo esperaba, que me mandaras el php con el intento de meter también las fechas en la bbdd, bueno inténtalo si tienes algún quebranto por aquí andamos.

113
Aprender a programar desde cero / Re:Quiero aprender a programar
« en: 12 de Agosto 2014, 19:31 »
Pues de los libros ni idea, habrá muchas editoriales que tengan libros. De todas formas un curso como el que esta en la web principal de esta pagina creo que es mejor que cualquier libro que puedas encontrar, ya que esta totalmente optimizado para gente que este empezando.

Nota: no intentes buscar un libro que te enseñe a programar en 2 días, porque eso no existe, programar es un proceso que lleva años practicando a DIARIO para poder controlar un lenguaje(también depende de lo que pretendas hacer, pero eso, es un proceso largo).

Así que lo que yo te recomiendo, es que te mentalices y empieces algún curso desde hoy( el de esta web esta bastante bien) y bueno cuando no entiendas algo, pregunta, que nadie nació sabiendo, no te preocupes por la edad, cualquiera puede aprender siempre y cuando se sea constante.

Y nada, eso mientras antes cogas material y te pongas manos a la obra, antes empezaras a coger nivel. 

114
Aprender a programar desde cero / Re:Quiero aprender a programar
« en: 12 de Agosto 2014, 12:46 »
Pues si, en los CFGS las matemáticas son las justas, son totalmente prácticos y las matemáticas que te encontraras son sencillas y entendible por cualquiera, en caso de ser algo mas profundo, te lo explicarán.  Así que si realmente estas decidido a estudiar algo y no tienes mucha base, yo creo que un ciclo te iría estupendamente. 

115
Me has vuelto a poner exactamente el mismo código de ayer...

Bueno intentare explicarte mediante ejemplos, imagina que tenemos una tabla que se llama valencia, imagina que esta tabla
tiene 4 columnas, nombre_fiesta, pueblo, fecha_inicio y fecha_fin.

ahora imagina que tenemos 4 variables php, las cuales cada una recoge un valor del formulario, llamémoslas:

$nombrePueblo
$nombreFiesta
$fechaInicio
$fechaFin

Pues bien si vas a meter todos los campos en la tabla, debes usar una sentencia tipo:

Código: [Seleccionar]
INSERT INTO valencia VALUES( '$nombrePueblo','$nombreFiesta','$fechaInicio','$fechaFin' );

Con esta sentencia de este tipo, nos obliga a rellenar todos los campos que tiene la tabla.

En cambio, imagina que solo quieres almacenar el pueblo y la fiesta y dejar la fecha para mas adelante,
entonces debes usar una sentencia de este tipo:

Código: [Seleccionar]
INSERT INTO valencia(pueblo,nombre_fiesta) VALUES( '$nombrePueblo','$nombreFiesta');

Fíjate en  que la segunda sentencia se especifica las columnas  que vamos a meter. Otro ejemplo, imagina  que ahora
solo vamos a meter el nombre de la fiesta, la fecha de inicio y la de fin, entonces tendríamos la siguiente sentencia:

Código: [Seleccionar]
INSERT INTO valencia(nombre_fiesta, fecha_inicio,fecha_fin) VALUES( '$nombreFiesta', '$fechaInicio','$fechaFin');

Siguiente cosa: formato de las fechas:

Para insertar fechas en mysql es recomendable usar la función STR_TO_DATE(cadena_fecha, cadena_formato) de mysql. El enlace a la documentación de la función es el siguiente:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date

por lo cual según lo que he visto tu tienes los 4 campos 2 de ellos son fechas y ademas dices que con un formato de aaaa-mm-dd, pues bien, suponiendo que seguimos con las variables anteriores, tu sentencia para meter en la tabla todos los campos podría ser una de estas dos:

Código: [Seleccionar]
INSERT INTO valencia(nombre_fiesta,pueblo, fecha_inicio,fecha_fin) VALUES( '$nombreFiesta',$nombre_pueblo,STR_TO_DATE('$fechaInicio','%Y-%m-%d'), STR_TO_DATE('$fechaFin','%Y-%m-%d'));

o

Código: [Seleccionar]
INSERT INTO valencia VALUES( '$nombreFiesta',$nombre_pueblo,STR_TO_DATE('$fechaInicio','%Y-%m-%d'), STR_TO_DATE('$fechaFin','%Y-%m-%d'));

la primera le indicamos el orden en que entraran los datos, y en la segunda los datos entraran en el mismo orden en que se crearon los campos en la tabla cuando la creaste.

La verdad que es un tema extenso y se podría hablar durante días de el, yo te recomendaría que siempre que vayas a insertar datos, lo hagas de la forma:

Código: [Seleccionar]
insert into nombre_tabla(lista_de_columnas) values(lista_de_valores)

De esta manera, nunca tendrás la necesidad de recordar el orden de las filas ya que lo impones tu mediante la lista de columnas le vas diciendo en que orden van a ir entrando los datos, intenta montarte el script.php de manera que insertes todos los datos(incluidas fechas), y ya si tienes algún problema nos cuentas. Como te digo, el código que me has pasado es exactamente el mismo de ayer y en teoría te debe funcionar, siempre y cuando quitaras las columnas fecha_inicio y fecha_fin de la tabla.

Bueno eso, intenta pelearte un rato para conseguir insertar todos los valores del formulario en la tabla, y ya si tienes algún problema nos cuentas.

116
Podrías ponerme el código php con  las fechas incluidas. Asi lo reviso y veo que puede estar pasando.

Y ejk a ver, cuando tu vas a meter datos en una tabla, o los metes todos haciendo:

Código: [Seleccionar]
insert into valencia values('$pueblo','$fiesta','$fecha_ini', '$fecha_fin' )

o si solo vas a meter algunos, debes indicar cuales vas a meter por ejemplo:

Código: [Seleccionar]
insert into  valencia(pueblo, fiesta) VALUES('$pueblo', '$fiesta')

Si te fijas, en la segunda sentencia, como no estoy metiendo solo algunos valores, tengo que indicar después del nombre de la tabla los valores que estoy metiendo, mientras que en la primera como no le digo que campos estoy insertando, me obliga a que los inserte todos. Entonces esto es lo que te esta pasando a ti.

si quieres eso, pon nos el código php y le echamos el ojo ;)

Nota: Precisamente esto te andaba yo contando XDD, no te preocupes, para eso andamos por aqui, para aprender entre todos.

117
De todo un poco... / Re:Capturar opcion elegina en JoptionPane
« en: 11 de Agosto 2014, 20:59 »
Pues no es difícil, a ver tu ya tendrás una clase que extienda de JFrame y que sera el formulario(LLamemoslas Formcliente y FormServicio), pues tan simple como en la condición que captura los valores crear un objeto de estos tipos y hacerlo visible te pongo como deberá quedar el código:


Código: [Seleccionar]
btnNuevo.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Object[] options = { "Cliente", "Servicio" };
                int opcion=JOptionPane.showOptionDialog(null, "Elige Cliente o Servicio", "Aviso",
                JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
                null, options, options[0]);
                if(opcion==0){
                            new FormCliente().setVisible(true);
                        }
                        else{
                              new FormServicio().setVisible(true);
                        }
}
});

Y eso, FormCliente y FormServicio, seran cada una de las dos ventanas dependiendo de la opción, no se si me explicado, si tienes alguna duda vuelve a escribirnos, un saludo!!

Nota:Hay muchas mas maneras de hacerlo.... esto es una de ellas...

118
De todo un poco... / Re:Capturar opcion elegina en JoptionPane
« en: 11 de Agosto 2014, 16:55 »
Te paso el listener modificado con la detección del botón pulsado, fíjate en la variable int opcion a la que le asigno el valor del joptionpane, esta variable tendrá un valor de acuerdo al botón que se ha pulsado, en este caso al haber solo dos botones la variable opción tomará los valores 0 y 1, si hubiera 5 botones, los valores irían del 0 al 4.

Bueno, sin mas el listener modificado:
Código: [Seleccionar]
btnNuevo.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Object[] options = { "Cliente", "Servicio" };
                int opcion=JOptionPane.showOptionDialog(null, "Elige Cliente o Servicio", "Aviso",
                JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
                null, options, options[0]);
                if(opcion==0){
                            System.out.println("has elegido cliente");
                        }
                        else{
                             System.out.println("has elegido servicio");
                        }
}
});

Pero una cosa, eso es un OptionDialog, el inputDialog tiene un campo de texto para escribir, bueno a ver si esto te vale, un saludo!!

119
Bien, bien, pues te recomiendo repases las primeras lecciones del curso de esta web que esta bastante bien estructurado y con explicaciones sencillas y claras.

Te invito a que realices los ejercicios que en este curso se encuentren y nos vayas posteando las soluciones para poder darte indicaciones y resolver dudas.

También puedes apuntarte a un curso tutorizado con el cual tendras un tutor asignado que te guiará y ayudará.

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=64&Itemid=87

Aun así, decidas lo que decidas, estaremos por aquí por el foro para poder ayudarte, un saludo!

120
Hola, buenos días, antes de nada, te recomiendo que jamás, jamás, pongas datos reales sobre tu bbdd(servidor user y pass), no se si son reales lo que has puesto pero parece que si, yo editaría el mensaje y los quitaría, no es necesario que des datos personales como estos.

Tras este consejo, bueno he repasado el código y parece estar todo correcto, así que puede ser o que esta fallando al hacer la conexión, o al hacer la inserción.

te recomendaría que compruebes esas dos sentencias, para ello te añado a tu código lo que debes poner para ver si alguno falla.

Código: [Seleccionar]
<?php 

$pueblo$_GET['pueblo'];

$fiesta$_GET['fiesta'];

//$fecha_inicio= $_GET['fecha_inicio'];

//$fecha_fin= $_GET['fecha_fin'];


//$fecha_inicio = GET_FORMAT($fecha_inicio,'USA');


$link mysql_connect("*******","*******","*******");
if(! 
$link )
{
  die(
'No es posible conectar: ' mysql_error());
}
else
{
    echo 
"conexion correcta";
}


mysql_select_db("a4047274_fiestas"$link);

$result=mysql_query("INSERT INTO valencia VALUES('$pueblo', '$fiesta')"$link);

if(! 
$result )
{
  die(
'No se pudieron insertar los datos: ' mysql_error());
}
else
{
     echo 
"datos insertados";
}
mysql_close($link);



?>


Si te fijas los dos if que he metido, el primero es para comprobar si la conexión a sido correcta, y el segundo para ver si se insertaron los datos, en caso de fallar alguna de esas dos sentencias, nos dirá a que es debido. Intentalo con ese script a ver si se puede averiguar que esta pasando.

Un saludo!

edito: he estado haciendo ping y nmap(3306) al servidor que has puesto y no se obtiene respuesta, como te digo no se si es la dirección real, pero comprueba que el host(mysql13.000webhost.com) este bien

Páginas: 1 2 3 4 5 [6] 7 8 9

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".