[Hilo Oficial II] Java

veeeenga tios que no me quiero ir con la duda a la tumba
gcvictorgc escribió:Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo


Yo creo que es totalmente correcto y lo apropiado. Voy a intentar explicarme.

La función 'main' no es más que un punto de entrada a la aplicación, o en otras palabras, la primera función que se ejecuta para iniciar todo el proceso de la aplicación. Por tanto es lógico que sea estático ya que tiene que existir y ser accesible desde el inicio, y eso no se puede conseguir si no fuera estático. Esto lo explico simplemente para ver porque 'main' tiene que ser estático y que ello no es un motivo para no poder instanciar, dentro de dicho 'main', la clase que lo contiene.

Desde mi punto de vista, en un lenguaje OO como Java, lo correcto es siempre trabajar con instancias de las clases salvo en aquellos casos que una clase estática (y con clase estática quiero simplemente referirme a una clase con solamente métodos estáticos y no instanciable) sea una solución más apropiada ya que crear instancias de ella no tenga sentido alguno por su finalidad. Es muy normal ver clases que suelen contienen un o varios métodos estáticos que sirven sencillamente como ayuda para instanciar la clase que las contiene, similar a una factoría de objetos.

Espero que mi mensaje y la explicación se entiendan bien y sean coherentes, estoy medio dormido pero quería dejar mi punto de vista XD
Waninkoko escribió:
gcvictorgc escribió:Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo


Yo creo que es totalmente correcto y lo apropiado. Voy a intentar explicarme.

La función 'main' no es más que un punto de entrada a la aplicación, o en otras palabras, la primera función que se ejecuta para iniciar todo el proceso de la aplicación. Por tanto es lógico que sea estático ya que tiene que existir y ser accesible desde el inicio, y eso no se puede conseguir si no fuera estático. Esto lo explico simplemente para ver porque 'main' tiene que ser estático y que ello no es un motivo para no poder instanciar, dentro de dicho 'main', la clase que lo contiene.

Desde mi punto de vista, en un lenguaje OO como Java, lo correcto es siempre trabajar con instancias de las clases salvo en aquellos casos que una clase estática (y con clase estática quiero simplemente referirme a una clase con solamente métodos estáticos y no instanciable) sea una solución más apropiada ya que crear instancias de ella no tenga sentido alguno por su finalidad. Es muy normal ver clases que suelen contienen un o varios métodos estáticos que sirven sencillamente como ayuda para instanciar la clase que las contiene, similar a una factoría de objetos.

Espero que mi mensaje y la explicación se entiendan bien y sean coherentes, estoy medio dormido pero quería dejar mi punto de vista XD

Gracias.
Hola

Conocéis algún curso/master para profundizar en el ecosistema java? (maven, tomcat etc).

Se que existe internet y libros, pero quería saber si había algo mas guiado, dirigido, con personas :P
confusedmind está baneado por "Faltas de respeto"
hago copy/paste de un hilo que puse en pc, a ver si me podéis ayudar:

hilo_alguien-que-entienda-de-java_1907098

el caso es que si defino variables dentro de un static void xxxxxxxxx () luego en otro static void no me las reconoce..... cómo hago para que me pille las variables de forma global o poderlas pillar?
gcvictorgc escribió:Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo


Es una chapuza, lo ideal seria crear una clase "utilidades" con funciones estaticas las cuales podreis llamar desde el main sin crear un objeto "utilidades".

Saludos
Hola si me resolveis este problemas seré el más feliz de la tierra.
La duda es que no se como guardar mas de cadena de texto en un archivo.
MIra por ejemplo.
pongo dime tu nombre .
pones por ejemplo juan.
Y lo guardo.
Hasta hay genial pero si por ejemplo pongo esto:
elige entre estas dos opciones:
Nombre y apellido
solo nombre.
selccionamos solo el nombre, y lo ponemos y ahora yo pregunto; quiere guardar otro nombre si responde afirmativamente pues al volver a preguntar me peta siempre el programa no puedo volver hacia atras no me deja .
pongo mi ejemplo en codigo para que se entienda
do{
            
            
         
      
                  //PREGUNTO QUE SE QUIERE CREAR
                  
                  do{
                  System.out.println("que quiere");
                  System.out.println("nombre");
                  System.out.println("nombre y apellido");
            
                  veredicto=teclado.nextLine();
               }while(!veredicto.equalsIgnoreCase("nombre")&&!veredicto.equalsIgnoreCase("nombre y apellido")&&!veredicto.equals("no"));
               
                  if (veredicto.equalsIgnoreCase("nombre")){
                     
                     System.out.println("Introduzca el nombre ");
                     nombre.setNombre(teclado.nextLine());
                     System.out.println("+Cliente.getNombre()+" Ha sido creado y agregado a la lista");
                                                System.out.println("quiere poner algo mas");
                                                                         teclado.nextline();
//si fuera no se terminaria la aplicacióm si pone si quiero que vuelva pero siempre falla y no se que poner
               
               }
               
            
            }while(!Respuesta.equalsIgnoreCase("nombre")&&!Respuesta.equalsIgnoreCase("apellido")&&!&&repetir.equalsIgnoreCase("si"));
            
   
            
   
   
   
   //Vamos a guardar el nombre del cliente y su compra
   try{ String lineaArchivo;
    String fuenteArchivo=Nombre.getNombre();
    BufferedReader fuenteSalida;
    String fuentevinilo=apellido.getTitulo();
   
    fuenteSalida = new BufferedReader(

    new StringReader(fuenteArchivo));



    // Se define un stream de salida (PrintWriter)

    // que tomara los datos de memoria (BufferedWriter)

    // y los escribira en un archivo (FileWriter)

    PrintWriter archivoSalida;

    archivoSalida = new PrintWriter(

    new BufferedWriter(
//desde este fichero se podrá ver el nombre y articulo ademas de poderse borrar facilmente
    new FileWriter("C:nombres.txt")));


    while ((lineaArchivo = fuenteSalida.readLine()) != null)
//Datos que se guardaran en el fichero de texto
    archivoSalida.println(1 + " nombre: " + lineaArchivo );
    archivoSalida.println(2+ " apellido :"+fuentevinilo);

    // Se cierra el stream de salida

    archivoSalida.close(); }
    catch (IOException e) {

    System.out.println("Excepcion Entrada/Salida");
   
}
   
   }
}

[buuuaaaa]
confusedmind está baneado por "Faltas de respeto"
No entiendo cómo dentro del main puedo meter 2 funciones / procedimientos porque siempre me da fallos, me dice que no encuentra las variables que defino fuera si hago dentro 2 funciones.... o siempre me da petes, con lo fácil que es en visual basic y aquí no consigo hacer esta chorrada que sería sacar el tema de las preguntas y lo de mostrar las respuestas en 2 funciones y ya.... cómo se puede hacer eso?¿?¿

public class PatataCaliente {
   
    public static void main (String []args){
        // Variables
        int numero = 0;// Que el usuario introduce por pantalla
        int intentos = 0;// intentos del usuario. Máximo 10
        int numPregunta = (int)(Math.random()*3);
        String pregunta="";
        int respuesta = 0;
       
        // Ejecucion del programa
        switch( numPregunta ){
            case 0:
                 pregunta = "En que año nacio Albert Einstein ";
                 respuesta = 1893 ;
                 break ;
            case 1:
                pregunta = "En que año nacio Federico Garica Lorca ";
                respuesta = 1893 ;
                break ;
            default:
                pregunta = "En que año nacio Miguel Indurain ";
                respuesta = 1893 ;
                break ;
        }
       
        Scanner teclado = new Scanner(System.in);
   
        do{
                System.out.println(pregunta);
                numero = teclado.nextInt();
                intentos++;
                System.out.println("La fecha seleccionada fue: " + numero);
                if (numero > respuesta){
                    System.out.println("La fecha es menor. Intentalo otra vez.");
                }
                if (numero < respuesta ){
                    System.out.println("La fecha es mayor. Intentalo otra vez.");
                }
        }while( numero != respuesta && intentos < 10);

        if( intentos < 11){
            System.out.println("Enhorabuena. La fecha era:  " + respuesta);
            System.out.println("Lo has conseguido en " + intentos + " intentos." + " Te has salvado por los pelos.");   
        }else{
            System.out.println("Has superado el numero de intentos: " + intentos + " Explota la patata.");   
        }
}

   
}


nadie me puede echar un cable?? es sólo sabér cómo habiendo definido variables en el main, el poder luego dentro de esa misma clase, crear 2 funciones o procedimientos, para meter en una todo el código de las preguntas y en otra el código de las respuestas, y poder usar en ambas funciones / procedimientos las variables declaradas fuera, en el main, me estoy volviendo loco y es una chorrada....... ratataaaa
¿Por qué tiene la gente esa manía de programar juegos en Java?

Por dios...que cualquier tontería ya chupa medio giga de RAM y calienta los portátiles que no veas.
deivor escribió:Hola si me resolveis este problemas seré el más feliz de la tierra.
La duda es que no se como guardar mas de cadena de texto en un archivo.
MIra por ejemplo.
pongo dime tu nombre .
pones por ejemplo juan.
Y lo guardo.
Hasta hay genial pero si por ejemplo pongo esto:
elige entre estas dos opciones:
Nombre y apellido
solo nombre.
selccionamos solo el nombre, y lo ponemos y ahora yo pregunto; quiere guardar otro nombre si responde afirmativamente pues al volver a preguntar me peta siempre el programa no puedo volver hacia atras no me deja .
pongo mi ejemplo en codigo para que se entienda
do{
            
            
         
      
                  //PREGUNTO QUE SE QUIERE CREAR
                  
                  do{
                  System.out.println("que quiere");
                  System.out.println("nombre");
                  System.out.println("nombre y apellido");
            
                  veredicto=teclado.nextLine();
               }while(!veredicto.equalsIgnoreCase("nombre")&&!veredicto.equalsIgnoreCase("nombre y apellido")&&!veredicto.equals("no"));
               
                  if (veredicto.equalsIgnoreCase("nombre")){
                     
                     System.out.println("Introduzca el nombre ");
                     nombre.setNombre(teclado.nextLine());
                     System.out.println("+Cliente.getNombre()+" Ha sido creado y agregado a la lista");
                                                System.out.println("quiere poner algo mas");
                                                                         teclado.nextline();
//si fuera no se terminaria la aplicacióm si pone si quiero que vuelva pero siempre falla y no se que poner
               
               }
               
            
            }while(!Respuesta.equalsIgnoreCase("nombre")&&!Respuesta.equalsIgnoreCase("apellido")&&!&&repetir.equalsIgnoreCase("si"));
            
   
            
   
   
   
   //Vamos a guardar el nombre del cliente y su compra
   try{ String lineaArchivo;
    String fuenteArchivo=Nombre.getNombre();
    BufferedReader fuenteSalida;
    String fuentevinilo=apellido.getTitulo();
   
    fuenteSalida = new BufferedReader(

    new StringReader(fuenteArchivo));



    // Se define un stream de salida (PrintWriter)

    // que tomara los datos de memoria (BufferedWriter)

    // y los escribira en un archivo (FileWriter)

    PrintWriter archivoSalida;

    archivoSalida = new PrintWriter(

    new BufferedWriter(
//desde este fichero se podrá ver el nombre y articulo ademas de poderse borrar facilmente
    new FileWriter("C:nombres.txt")));


    while ((lineaArchivo = fuenteSalida.readLine()) != null)
//Datos que se guardaran en el fichero de texto
    archivoSalida.println(1 + " nombre: " + lineaArchivo );
    archivoSalida.println(2+ " apellido :"+fuentevinilo);

    // Se cierra el stream de salida

    archivoSalida.close(); }
    catch (IOException e) {

    System.out.println("Excepcion Entrada/Salida");
   
}
   
   }
}

[buuuaaaa]


Nadie me puede echar un cable no eh conseguido resolverlo todavia [triston]
teesala escribió:
gcvictorgc escribió:Hola, estamos programando una práctica en java en la universidad
No es nada complicado, es leer de un fichero una serie de datos y hacer un par de opraciones con ellos
El caso es que teniamos una duda y el profesor me ha dicho que cree un objeto de la clase que contiene el metodo main, dentro del propio metodo main. Para poder tener acceso a una serie de variables. Funciona. Ese no es el problema.

A mi me parece una mala práctica la recomendación del profesor y le explicado por qué pero no le he convencido, así que os lo pregunto a vosotros:

Lo que yo digo es, ¿de que te sirve que el método main sea static si vas a estar creando objetos de la clase que lo contiene, y además dentro del propio metodo main?

Un saludo


Es una chapuza, lo ideal seria crear una clase "utilidades" con funciones estaticas las cuales podreis llamar desde el main sin crear un objeto "utilidades".

Saludos


Bueno, en realidad eso de las clases de utilidades sí que es algo un poco chapucero y que va contra la base de la OOP, pero bueno, todo el mundo lo hace y está más o menos aceptado...
Hola buenas, he estado haciendo un programa en java, el conecta 4, he lllegado a poder jugar perfectamente, lo unico que me da un problema ya que me da un valor -1 pero no encuentro el problema el error esta en el movimientomaquina()
import java.awt.*;
import javax.swing.ImageIcon;

public class cuatroenraya extends javax.swing.JFrame {
    public cuatroenraya() {
        initComponents();
        getContentPane().setBackground(Color.black);
        this.jTextField1.setVisible(false);
        this.jButton4.setVisible(false);
        this.jTextField2.setVisible(false);
        this.jButton5.setVisible(false);
        this.jButton6.setVisible(false);
    }
   
    boolean vez=false;
    static int vector[] = new int [7];
    static int tablero[][] = new int[6][7];
    int turnoj1=1;
    int turnoj2=1;
    boolean finpartida;
    boolean numjug;
    public static void inicializotablero()
    {
        for(int i=0;i<6;i++)
        {
            for (int j=0;j<7;j++)
            {
                tablero[i][j]=0;
            }
        }
        for(int i=0;i<7;i++)
        {
            vector[i]=0;
        }
    }
    void movimientomaquina()
    {
        boolean puesto = false;
        int h;
        int x;
        for(int i=0;i<6;i++)
        {
            for (int j=0;j<7;j++)
            {
               
                if(j>0 && j<=3)
                {
                   
                    if(!puesto && tablero[i][j]==1 && tablero[i][j+1]==1 && tablero[i][j+2]==1)
                    {
                       
                        h=j;
                        if(tablero[i][h-1]==0)
                        {
                            h=h-1;
                            x=5-vector[h];
                            if(x>=0)
                            {
                            tablero[x][h]=2;
                            vector[h]++;
                            puesto=true;
                            }
                        }
                        else if(tablero[i][h+3]==0)
                        {
                            h=h+3;
                            x=5-vector[h];
                            if(x>=3)
                            {
                            tablero[5-vector[x]][h]=2;
                            vector[x]++;
                            puesto=true;
                            }
                        }   
                }
                }
                else
                {
                    if(i>=3 && j<=4)
                    {
                    if(!puesto && tablero[i][j]==1 && tablero[i-1][j]==1 && tablero[i-2][j]==1)
                    {
                        h=j; 
                        x=h;
                        tablero[5-vector[h]][h]=2;
                        vector[h]++;
                        puesto=true;
                    }
                    }
                    else
                    {
                        if( i>=3 && j<=3)
                        {
                        if(!puesto && tablero[i][j]==1 && tablero[i-1][j+1]==1 && tablero[i-2][j+2]==1 && tablero[i-3][j+2]!=0)
                        {
                            h=j;
                            j=j+2;
                            tablero[5-vector[h]][h]=2;
                            vector[h]++;
                            puesto=true;
                        }
                        }
                        else
                        {
                            if(i>=3 && j>=3)
                            {
                            if(!puesto && tablero[i][j]==1 && tablero[i-1][j+1]==1 && tablero[i-2][j-2]==1 && i>=3 && j>=3 && tablero[i-3][j-2]!=0)
                            {
                                h=j;
                                j=j-2;
                                tablero[5-vector[h]][h]=2;
                                vector[h]++;
                                puesto=true;
                            }
                            }
                        }
                    }
                }
            }
        }
        if(vez==false && !puesto)
        {
            int colofich= (int) Math.random()*7;
            tablero[5-vector[colofich]][colofich]=2;
            vector[colofich]++;
            vez=true;
        }
        else
        {
            for (int i=0;i<6;i++)
            {
                for(int j=0;j<7;j++)
                {
                    if(tablero[i][j]==2)
                    {
                        if(j<6)
                        {
                        if(tablero[i][j+1]==0 && j<6 && !puesto)
                        {
                                    h=j;
                                    h=h+1;
                                    tablero[5-vector[h]][h]=2;
                                    vector[h]++;
                                    puesto=true;
                        }
                        }
                        else
                        {
                            if(i>=1 && tablero[i-1][j]==0 && !puesto)
                            {
                                tablero[5-vector[j]][j]=2;
                                vector[j]++;
                                puesto=true;
                            }
                            else
                            {
                                if( i>=1 && tablero[i-1][j+1]==0 && !puesto)
                                {
                                    h=j;
                                    h=h+1;
                                    tablero[5-vector[h]][h]=2;
                                    vector[h]++;
                                    puesto=true;
                                }
                                else
                                {
                                    if(i>=1 && j>=1 && tablero[i-1][j-1]==0 && !puesto)
                                    {
                                        h=j;
                                        h=h-1;
                                        tablero[5-vector[h]][h]=2;
                                        vector[h]++;
                                        puesto=true;
                                    }
                                    else
                                    {
                                        if(!puesto)
                                        {
                                            int colofich= (int) Math.random()*7;
                                            tablero[5-vector[colofich]][colofich]=2;
                                            vector[colofich]++;
                                            puesto=true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    public static boolean ganadora()
    { 
        boolean gan=false;
        for(int i=0;i<6;i++)
        {
            for(int j=0;j<7;j++)
            {
                ganar(i,j);
                if(ganar(i,j)==true)
                {
                   gan=true;
                }
            }
        }
        return gan;
    }
    public static void menu() throws Exception
    {
        inicializotablero();
    }
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        ImageIcon fondo = new ImageIcon(new ImageIcon(getClass().getResource("fondo.jpg")).getImage());
        g.drawImage(fondo.getImage(), -150, 0, null);
        dibujartablero(g);
       
    }
    void comprobarganadormj()
    {
        if(ganadora()==true)
        {
            if(turnoj1==turnoj2)
            {
                this.jLabel1.setText("Gana el jugador 2");
                this.jButton4.setVisible(false);
                this.jButton5.setVisible(false);
                this.jButton6.setVisible(false);
                this.jTextField1.setVisible(false);
                this.jTextField2.setVisible(false);
            }
            if(turnoj1>turnoj2)
            {
                this.jLabel1.setText("Gana el jugador 1");
                this.jButton4.setVisible(false);
                this.jButton5.setVisible(false);
                this.jButton6.setVisible(false);
                this.jTextField1.setVisible(false);
                this.jTextField2.setVisible(false);
            }
        }
    }
    void dibujartablero(Graphics g)
    {
        ImageIcon fichablanco = new ImageIcon(new ImageIcon(getClass().getResource("fichagris.png")).getImage());
        ImageIcon ficharoja = new ImageIcon(new ImageIcon(getClass().getResource("ficharoja.png")).getImage());
        ImageIcon fichanegra = new ImageIcon(new ImageIcon(getClass().getResource("fichanegra.png")).getImage());
        int x=150;
        int y=150;
        for(int i=0;i<6;i++)
        {
            for(int j=0;j<7;j++)
            {
                if(tablero[i][j]==0)
                {
                    g.drawImage(fichablanco.getImage(), x, y, null);
                    x=x+100;
                    if (j==tablero[i].length-1)
                    {
                        x=150;
                        y=y+80;
                    }
                }
                if(tablero[i][j]==1)
                {
                    g.drawImage(ficharoja.getImage(), x, y, null);
                    x=x+100;
                    if (j==tablero[i].length-1)
                    {
                        x=150;
                        y=y+80;
                    }
                }
                if(tablero[i][j]==2)
                {
                    g.drawImage(fichanegra.getImage(), x, y, null);
                    x=x+100;
                    if (j==tablero[i].length-1)
                    {
                        x=150;
                        y=y+80;
                    }
                }
            }
        }
    }
    public void unjugador()
    {
        if(turnoj1==turnoj2)
        {
            this.jLabel1.setText("");
            String text;
            int n;
            text=jTextField1.getText();
            n=Integer.parseInt(text);
            n=n-1;
            tablero[5-vector[n]][n]=1;
            vector[n]++;
            turnoj1++;
            repaint();
            if(ganadora()==true)
            {
                this.jLabel1.setText("Gana el jugador 1");
                this.jButton4.setVisible(false);
                this.jButton5.setVisible(false);
                this.jButton6.setVisible(false);
                this.jTextField1.setVisible(false);
                this.jTextField2.setVisible(false);
            }
        }
        if(turnoj1-1==turnoj2)
        {
            movimientomaquina();
            if(ganadora()==true)
            {
                this.jLabel1.setText("Gana el jugador 2");
                this.jButton4.setVisible(false);
                this.jButton5.setVisible(false);
                this.jButton6.setVisible(false);
                this.jTextField1.setVisible(false);
                this.jTextField2.setVisible(false);
            }
            turnoj2++;
            repaint();
        }
    }
    public void multijugadorj1()
    {
        this.jLabel1.setText("");
        if(turnoj1==turnoj2)
        {
            if(!ganadora())
            {
                String textj1;
                int j1;
                textj1=jTextField1.getText();
                j1=Integer.parseInt(textj1);
                j1=j1-1;
                tablero[5-vector[j1]][j1]=1;
                vector[j1]++;
                jTextField1.setText("");
                turnoj1++;
                comprobarganadormj();
                repaint();
            }
        }
        else
        {
            this.jLabel1.setText("No es tu turno");
        }
    }
    public void multijugadorj2()
    {
        this.jLabel1.setText("");
        if(turnoj1-1==turnoj2)
        {
            String textj2;
            int j2;
            textj2=jTextField2.getText();
            j2=Integer.parseInt(textj2);
            j2=j2-1;
            tablero[5-vector[j2]][j2]=2;
            vector[j2]++;
            jTextField2.setText("");
            turnoj2++;
            comprobarganadormj();
            repaint();
        }
        else
        {
            this.jLabel1.setText("No es tu turno");
        }
    }
    static boolean ganar(int i, int j)
    {
        boolean juggan;
        if(derecha(i,j))
        {
            juggan=true;
        }
        else if(diagonalderecha(i,j))
        {
            juggan=true;
        }
        else if(diagonalizquierda(i,j))
        {
            juggan=true;
        }
        else if(abajo(i,j))
        {
            juggan=true;
        }
        else
        {
            juggan=false;
        }
        return juggan;
    }
    static boolean derecha (int i, int j)
    {
        boolean retorno;
        if(j<3)
        {
        if(tablero[i][j]==tablero[i][j+1] && tablero[i][j]!=0)
        {
            if(tablero[i][j]==tablero[i][j+2] && tablero[i][j]!=0)
            {
                if(tablero[i][j]==tablero[i][j+3] && tablero[i][j]!=0)
                {
                    retorno=true;
                }
                else
                {
                    retorno=false;
                }
            }
            else
            {
                retorno=false;
            } 
        }
        else
        {
            retorno=false;
        }
        }
        else
        {
            retorno=false;
        }
        return retorno;
    }
    static boolean diagonalderecha (int i, int j)
    { boolean retorno;
        if(i<=2 && j<=3)
        {
        if(tablero[i][j]==tablero[i+1][j+1] && tablero[i][j]!=0)
        {
            if(tablero[i][j]==tablero[i+2][j+2])
            {
                if(tablero[i][j]==tablero[i+3][j+3])
                {
                    retorno=true;
                }
                else
                {
                    retorno=false;
                }
            }
            else
            {
                retorno=false;
            }
        }
        else
        {
            retorno=false;
        }
        }
        else
        {
            retorno=false;
           
        }
        return retorno;
    }   
    static boolean abajo(int i, int j)
    {
        boolean retorno;
        if(i<=2)
        {
        if(tablero[i][j]==tablero[i+1][j] && tablero[i][j]!=0)
        {
            if(tablero[i][j]==tablero[i+2][j] && tablero[i][j]!=0)
            {
                if(tablero[i][j]==tablero[i+3][j] && tablero[i][j]!=0)
                {
                    retorno=true;
                }
                else
                {
                    retorno=false;
                }
            }
            else
            {
                retorno=false;
            } 
        }
        else
        {
            retorno=false;
        }
        }
        else
        {
            retorno=false;
        }
        return retorno;
    }
    static boolean diagonalizquierda (int i, int j)
    {
        boolean retorno;
        if(i<=2 && j>2)
        {
            if(tablero[i][j]==tablero[i+1][j-1] && tablero[i][j]!=0)
            {
                if(tablero[i][j]==tablero[i+2][j-2])
                {
                    if(tablero[i][j]==tablero[i+3][j-3])
                    {
                        retorno=true;
                    }   
                    else
                    {
                        retorno=false;
                    }
                }
                else
                {
                    retorno=false;
                }
            }
            else
            {
                retorno=false;
            }
        }
        else
        {
            retorno=false;
        }
        return retorno;
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jButton4 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        jButton1.setText("Un Jugador");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Multijugador");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("Salir");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setText("Enviar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setText("Enviar");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jButton6.setText("Enviar");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Lucida Grande", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(204, 0, 0));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(871, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(jButton4)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jButton3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                                .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 123, Short.MAX_VALUE))
                            .addComponent(jTextField2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(17, 17, 17))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jButton5)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGap(60, 60, 60)
                                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                        .addGap(33, 33, 33))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(81, 81, 81)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(24, 24, 24)
                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton5)
                .addGap(35, 35, 35)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(268, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        System.exit(0);
    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        this.jButton4.setVisible(false);
        this.jTextField2.setVisible(true);
        this.jButton5.setVisible(true);
        this.jTextField1.setVisible(true);
        this.jButton6.setVisible(true);
        inicializotablero();
        this.jTextField1.setText("");
        this.jTextField2.setText("");
        repaint();
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        this.jTextField1.setVisible(true);
        this.jButton4.setVisible(true);
        this.jTextField2.setVisible(false);
        this.jButton5.setVisible(false);
        this.jButton6.setVisible(false);
        inicializotablero();
        boolean vez=false;
        int turnoj1=1;
        int turnoj2=1;
        this.jTextField1.setText("");
        this.jTextField2.setText("");
        repaint();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
               unjugador();

    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
        multijugadorj2();
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
        multijugadorj1();
    }//GEN-LAST:event_jButton6ActionPerformed

    /**
     *
     * @param args
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(cuatroenraya.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(cuatroenraya.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(cuatroenraya.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(cuatroenraya.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new cuatroenraya().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration//GEN-END:variables
}
Buenos días.

Como soy nuevo en esta sección del foro, tengo una pregunta con programación Java (he escrito en el general sin fijarme en el hilo XD XD . Lo he editado).

Resulta que en mi curro estoy haciendo un programa en Java a través del cual, intento extraer ficheros de un FTP y después insertar los datos de dicho fichero a mi BBDD que es Posgres.

El caso es que he conseguido descargar los ficheros FTP, sin embargo, con el otro paso tengo problemas.

¿Qué ocurre? Que la BBDD está en DBF, que como supongo que sabéis, es DBase (y en concreto, DBase IV). Y dado que estoy programando en Java, estoy buscando librerías que me permitan, no hacer el traspaso de DBF a Postgres, sino leer DBF.

Encontré algunas (el XBase por ejemplo) u otras como dbf2java, dbfdriver, jdbf...sin resultados positivos. El problema es que intento leer los datos del DBF, pero siempre me salta una Excepción de tipo outbounds, con lo cual me deja bastante mosca (y no es simplemente leyendo registro a registro, sino más bien a la hora de cargar el fichero). Es decir, que miro los ejemplos escrupolosamente y al final, tras hacerlos tal cual, me da el mismo problema.

Por tanto, yo no sé si es por:

- Problemas del fichero, que tiene algún índice que esté dando problemas.
- Problemas de las librerías.
- Problemas porque soy torpe y no consigo leer bien los datos XD XD XD .

Contemplo la posibilidad de cambiarlo a otro formato (tipo CSV), asi que estoy abierto a sugerencias.

Muchas gracias y un saludo.
ikiu escribió:Hola

Conocéis algún curso/master para profundizar en el ecosistema java? (maven, tomcat etc).

Se que existe internet y libros, pero quería saber si había algo mas guiado, dirigido, con personas :P


No creo que haya cursos de esos, me debería meter yo a darlos, que hay mucha gente en el paro deseando currar de informático xDD.
squarewave escribió:
ikiu escribió:Hola

Conocéis algún curso/master para profundizar en el ecosistema java? (maven, tomcat etc).

Se que existe internet y libros, pero quería saber si había algo mas guiado, dirigido, con personas :P


No creo que haya cursos de esos, me debería meter yo a darlos, que hay mucha gente en el paro deseando currar de informático xDD.



Muchas gracias, pues nada a tirar de libros
Yo no cogería de forma generalizada "libros" . Ten en cuenta las fechas de edición de los libros y que las cosas evolucionan bastante rápido.

Por ejemplo, no necesitas ser un puto masterchef de Maven para currar con él. Y en el libro Maven in Action te explican de todo. Pero para compilar y cuatro mierdas más, porque no creo que te pongas a picar plugins de Maven, te llega con los tutoriales que hay por Internet.


Kurace, ¿ has probado a consumir el DBF vía JDBC ? Es más lento, pero no te tienes que pelear con formatos.
        try  {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String connString="jdbc:odbc:Driver={Microsoft dBASE Driver (*.dbf)};DefaultDir=E:\\db";//DeafultDir indicates the location of the db
            Connection connection=DriverManager.getConnection(connString);
            String sql="SELECT * FROM table_name where condition";// usual sql query
            Statement stmt=connection.createStatement();
            ResultSet resultSet=stmt.executeQuery(sql);
            while(resultSet.next()) 
                System.out.println();
            System.out.println();
        }
        catch (ClassNotFoundException e)   {
            e.printStackTrace();
        }
        catch (SQLException e)   {
            e.printStackTrace();
        }
Muchas gracias, le echare un ojo

EDIT: Ese libro no lo encuentro (hablo de amazon, y sitios así), otra sugerencia?

squarewave escribió:Yo no cogería de forma generalizada "libros" . Ten en cuenta las fechas de edición de los libros y que las cosas evolucionan bastante rápido.

Por ejemplo, no necesitas ser un puto masterchef de Maven para currar con él. Y en el libro Maven in Action te explican de todo. Pero para compilar y cuatro mierdas más, porque no creo que te pongas a picar plugins de Maven, te llega con los tutoriales que hay por Internet.


Kurace, ¿ has probado a consumir el DBF vía JDBC ? Es más lento, pero no te tienes que pelear con formatos.
        try  {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String connString="jdbc:odbc:Driver={Microsoft dBASE Driver (*.dbf)};DefaultDir=E:\\db";//DeafultDir indicates the location of the db
            Connection connection=DriverManager.getConnection(connString);
            String sql="SELECT * FROM table_name where condition";// usual sql query
            Statement stmt=connection.createStatement();
            ResultSet resultSet=stmt.executeQuery(sql);
            while(resultSet.next()) 
                System.out.println();
            System.out.println();
        }
        catch (ClassNotFoundException e)   {
            e.printStackTrace();
        }
        catch (SQLException e)   {
            e.printStackTrace();
        }
deivor escribió:Hola si me resolveis este problemas seré el más feliz de la tierra.
La duda es que no se como guardar mas de cadena de texto en un archivo.
MIra por ejemplo.
pongo dime tu nombre .
pones por ejemplo juan.
Y lo guardo.
Hasta hay genial pero si por ejemplo pongo esto:
elige entre estas dos opciones:
Nombre y apellido
solo nombre.
selccionamos solo el nombre, y lo ponemos y ahora yo pregunto; quiere guardar otro nombre si responde afirmativamente pues al volver a preguntar me peta siempre el programa no puedo volver hacia atras no me deja .
pongo mi ejemplo en codigo para que se entienda
do{
            
            
         
      
                  //PREGUNTO QUE SE QUIERE CREAR
                  
                  do{
                  System.out.println("que quiere");
                  System.out.println("nombre");
                  System.out.println("nombre y apellido");
            
                  veredicto=teclado.nextLine();
               }while(!veredicto.equalsIgnoreCase("nombre")&&!veredicto.equalsIgnoreCase("nombre y apellido")&&!veredicto.equals("no"));
               
                  if (veredicto.equalsIgnoreCase("nombre")){
                     
                     System.out.println("Introduzca el nombre ");
                     nombre.setNombre(teclado.nextLine());
                     System.out.println("+Cliente.getNombre()+" Ha sido creado y agregado a la lista");
                                                System.out.println("quiere poner algo mas");
                                                                         teclado.nextline();
//si fuera no se terminaria la aplicacióm si pone si quiero que vuelva pero siempre falla y no se que poner
               
               }
               
            
            }while(!Respuesta.equalsIgnoreCase("nombre")&&!Respuesta.equalsIgnoreCase("apellido")&&!&&repetir.equalsIgnoreCase("si"));
            
   
            
   
   
   
   //Vamos a guardar el nombre del cliente y su compra
   try{ String lineaArchivo;
    String fuenteArchivo=Nombre.getNombre();
    BufferedReader fuenteSalida;
    String fuentevinilo=apellido.getTitulo();
   
    fuenteSalida = new BufferedReader(

    new StringReader(fuenteArchivo));



    // Se define un stream de salida (PrintWriter)

    // que tomara los datos de memoria (BufferedWriter)

    // y los escribira en un archivo (FileWriter)

    PrintWriter archivoSalida;

    archivoSalida = new PrintWriter(

    new BufferedWriter(
//desde este fichero se podrá ver el nombre y articulo ademas de poderse borrar facilmente
    new FileWriter("C:nombres.txt")));


    while ((lineaArchivo = fuenteSalida.readLine()) != null)
//Datos que se guardaran en el fichero de texto
    archivoSalida.println(1 + " nombre: " + lineaArchivo );
    archivoSalida.println(2+ " apellido :"+fuentevinilo);

    // Se cierra el stream de salida

    archivoSalida.close(); }
    catch (IOException e) {

    System.out.println("Excepcion Entrada/Salida");
   
}
   
   }
}

[buuuaaaa]


Ya que habeis escrito otra vez aqui a ver si me podeis echar una manita a lo que escribí es que no encuentro nada en mi manual y en google solo me dan respuesta para uno no para varios :-?
squarewave escribió:Yo no cogería de forma generalizada "libros" . Ten en cuenta las fechas de edición de los libros y que las cosas evolucionan bastante rápido.

Por ejemplo, no necesitas ser un puto masterchef de Maven para currar con él. Y en el libro Maven in Action te explican de todo. Pero para compilar y cuatro mierdas más, porque no creo que te pongas a picar plugins de Maven, te llega con los tutoriales que hay por Internet.


Kurace, ¿ has probado a consumir el DBF vía JDBC ? Es más lento, pero no te tienes que pelear con formatos.
        try  {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String connString="jdbc:odbc:Driver={Microsoft dBASE Driver (*.dbf)};DefaultDir=E:\\db";//DeafultDir indicates the location of the db
            Connection connection=DriverManager.getConnection(connString);
            String sql="SELECT * FROM table_name where condition";// usual sql query
            Statement stmt=connection.createStatement();
            ResultSet resultSet=stmt.executeQuery(sql);
            while(resultSet.next()) 
                System.out.println();
            System.out.println();
        }
        catch (ClassNotFoundException e)   {
            e.printStackTrace();
        }
        catch (SQLException e)   {
            e.printStackTrace();
        }


¡¡Muchas gracias!!

Era lo que tenía, y resulta que el driver JDBC ODBC lo debía tener mal. Afortunadamente ahora sí me lee los datos y puedo ya operar con ellos.

Edito: ya sé cuál era el problema. Al extraer los ficheros DBF por medio del FTP, va como el culo. Debe perder algún índice o algo, pues no me aclaro por qué motivo no permite hacerlo así. Al menos ya sé que no era problema de esto...

Saludos.
Para bajarte ficheros de un repositorio remoto ( por el protocolo que sea ) es muy útil Apache Commons VFS . ¿Programaste tú la lectura desde el FTP? A lo mejor es ese el problema :D .
769 respuestas
112, 13, 14, 15, 16