elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda Java (para noob)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Duda Java (para noob)  (Leído 6,899 veces)
Senior++


Desconectado Desconectado

Mensajes: 957

Ama y haz lo que te de la gana


Ver Perfil
Re: Duda Java (para noob)
« Respuesta #10 en: 5 Noviembre 2014, 15:35 pm »

Jona, te aconsejo estos ejercicios mejor

http://www.discoduroderoer.es/ejercicios-propuestos-y-resueltos-programacion-orientado-a-objetos-java/

y luego haz esos ;)


En línea

Vendo cuenta de LEAGUE OF LEGENDS lvl 30, EU west, muy barata
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda Java (para noob)
« Respuesta #11 en: 5 Noviembre 2014, 17:50 pm »

Si tira un NPE, pues sí, será que tienes que inicializar la variable. En Java todos los objetos han de inicializarse.


En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Duda Java (para noob)
« Respuesta #12 en: 6 Noviembre 2014, 00:41 am »

NPE?
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Duda Java (para noob)
« Respuesta #13 en: 6 Noviembre 2014, 01:25 am »

NPE
sicnifica que es un null pointer exception
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Zzombi

Desconectado Desconectado

Mensajes: 174



Ver Perfil WWW
Re: Duda Java (para noob)
« Respuesta #14 en: 6 Noviembre 2014, 03:27 am »

está clarito.. NULL POINTER, una variable apuntando a null.. por lo tanto no le puedes indicar las posiciones 0, 0 porque no tiene memoria reservada

Código
  1. public class Main {
  2.  
  3. private String[][] array = new String[5][5];
  4. /* private final static int filas = 6;
  5. private final static int columnas = 6;*/
  6.  
  7. public static void main(String[] args) {
  8. Main ob = new Main();
  9. ob.setArray();
  10. System.out.println(ob.array[0][0]);
  11. }
  12.  
  13. public void setArray() {
  14. this.array[0][0] = "hola";
  15. }
  16. }
  17.  
En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Duda Java (para noob)
« Respuesta #15 en: 8 Noviembre 2014, 13:20 pm »

Ya que estamos, continuo con este thread. No me gusta que el foro se llene porque sí.

Esta vez es algo más complejo (todo el mundo avanza  ;D). Realmente no sé cómo poner esto, porque yo lo manejo con un proyecto en eclipse, así que intentaré que quede claro.

Como veis, es un 4 en raya. Ahora mismo inserto fichas (solo del color BLANCA para probar) en una matriz, así de simple. El problema que tengo es que no sé porqué me ejecuta dos veces el while. Es como si en la clase Controlador, el comando = in.nextLine(); cogiera el espacio en blanco que hay después de la pregunta "¿Que quieres hacer?" y claro, dice: ¡Comando incorrecto!. Pero después de vuelve a ejecutar ese mismo while, y esta vez sí se para al realizar la pregunta "¿Que quieres hacer?".

Entonces, ¿por qué la primera vez no se para y la segunda vez sí se para?  :(

Estructura:

paquete control:
     - Clase Controlador
paquete logica:
     - Clase Partida
     - Clase Tablero
paquete main:
     - Clase Main

Código:

Código
  1. package control;
  2.  
  3. import logica.Tablero;
  4. import logica.Partida;
  5. import java.util.Scanner;
  6.  
  7. public class Controlador {
  8. //Método para los saltos de línea
  9. public static String nuevalinea = System.getProperty("line.separator");
  10. //Método para esperar X tiempo
  11. public void esperar () {
  12. try {
  13. //Esperaremos 2 segundos para que el usuario vea qué tipo de instrucciones están ejecutándose
  14. Thread.sleep (1*2000);
  15. } catch (Exception e) {
  16. }
  17. }
  18.  
  19. private Partida partida;
  20. private Scanner in;
  21. private boolean fin;
  22.  
  23.  
  24. public Controlador (Partida partida, Scanner in){
  25. this.partida = partida;
  26. this.in = in;
  27. this.fin = false;
  28. }
  29.  
  30. public void run(){
  31.  
  32. while (!fin){
  33. //muestra turno
  34. System.out.println(partida);
  35. System.out.print("¿Que quieres hacer? ");
  36. String comando;
  37. comando = in.nextLine();
  38.  
  39. if(comando.equalsIgnoreCase("PONER")) {
  40. System.out.print("Introduzca la columna: ");
  41. int c = in.nextInt();
  42. System.out.println(nuevalinea);
  43. boolean mov = this.partida.ejecutaMovimiento(c);
  44. }
  45.  
  46. /* else if (comando.equalsIgnoreCase("DESHACER")) {
  47.  
  48. boolean undo = this.partida.undo();
  49. if (undo = false){
  50. System.out.print("¡No es posible deshacer!");
  51. }
  52. }*/
  53.  
  54. else if (comando.equalsIgnoreCase("REINICIAR")) {
  55. System.out.println("Reseteando el Juego..." + nuevalinea);
  56. esperar();
  57. this.partida.reset();
  58. }
  59.  
  60. else if (comando.equalsIgnoreCase("SALIR")) {
  61. System.out.println("Saliendo..." + nuevalinea);
  62. fin = true;
  63. }
  64.  
  65. else {
  66. System.out.println("¡Comando incorrecto!");
  67. }
  68. }
  69. }
  70. }
  71.  


Código
  1. package logica;
  2. import logica.Tablero.FICHA;
  3.  
  4. public class Partida {
  5. private FICHA turno;
  6. private Tablero tablero;
  7. private boolean terminada;
  8. /* private int[] undo;
  9. private int indexUndo;*/
  10. public final static int FILAS = 6;
  11. public final static int COLUMNAS = 6;
  12.  
  13.  
  14. public Partida(){
  15.  this.tablero = new Tablero(FILAS,COLUMNAS);
  16. }
  17.  
  18.  
  19. public String toString(){
  20. return this.tablero.toString();
  21. }
  22.  
  23. public boolean partidaTerminada(){
  24. return false;
  25. }
  26.  
  27. public boolean ejecutaMovimiento(int c){
  28. if (c <= FILAS) {
  29. //Habría que poner la ficha referente al turno del jugador, he puesto la blanca solo para ver como funcionaría
  30. this.tablero.ponFicha(2,c,FICHA.BLANCA);
  31. //if (this.partida.partidaTerminada()) exit = true;
  32. return true;
  33. } else
  34. return false;
  35. }
  36.  
  37. public void reset(){
  38. this.tablero = new Tablero(FILAS, COLUMNAS);
  39. }
  40.  
  41. /* public boolean undo(){
  42.  
  43. }*/
  44.  
  45. private void buscarFila(){
  46.  
  47. }
  48.  
  49. private void comprobar(){
  50.  
  51. }
  52. }


Código
  1. package logica;
  2. import logica.Partida;
  3.  
  4. public class Tablero {
  5. public enum FICHA {VACIA, BLANCA, NEGRA};
  6. private int alto; //número de filas del tablero
  7. private int ancho; //número de columnas del tablero
  8. private FICHA[][] tablero;  //array tipo FICHA
  9.  
  10. public String toString() {
  11. String s = "";
  12. for (int x = Partida.FILAS-1; x >= 0; x--) {
  13. for (int y = 0; y < Partida.COLUMNAS; y++) {
  14. if (this.tablero[x][y] == FICHA.VACIA)  s=s+"O ";
  15. else if (this.tablero[x][y] == FICHA.BLANCA) s=s+"B ";
  16. else s= s + "N ";
  17. }
  18. s=s+System.getProperty("line.separator");
  19. }
  20. return s;
  21. }
  22.  
  23. public Tablero(int nf, int nc) {
  24. this.tablero = new FICHA[nf][nc];
  25. this.ancho = nc;
  26. this.alto = nf;
  27. for (int x = 0; x < nf; x++) {
  28. for (int y = 0; y < nc; y++) {
  29. this.tablero[x][y] = FICHA.VACIA;
  30. }
  31. }
  32. }
  33.  
  34.  
  35. public void ponFicha(int f, int c, FICHA ficha) {
  36. //c-1 se pone porque el array empieza en la columna 0
  37. for (int x = 0; x <= Partida.FILAS; x++) {
  38. //este bucle empieza a buscar la primera posición VACIA (de abajo a arriba) en la columna que hayas seleccionado,
  39. //y coloca la ficha BLANCA en dicha posición
  40. if (this.tablero[x][c-1] == FICHA.VACIA) {
  41. this.tablero[x][c-1] = ficha;
  42. //el break corta la ejecución del bucle
  43. break;
  44. }
  45. }
  46.  
  47. }
  48.  
  49. public FICHA colorFicha() {
  50. return FICHA.VACIA;
  51. }
  52.  
  53. public FICHA getFicha(int f, int c) {
  54. //devuelve la ficha en la posicion (f, c)
  55. return this.tablero[f][c];
  56. }
  57.  
  58. public boolean completo() {
  59. //devuelve true solo si el tablero esta completo
  60. //contador!!!
  61. return false;
  62. }
  63.  
  64. }


Código
  1. package main;
  2. import java.util.Scanner;
  3.  
  4. import control.Controlador;
  5. import logica.Partida;
  6.  
  7.  
  8.     public class Main {
  9.        private static Scanner in = new Scanner(System.in);
  10.  
  11.        public static void main(String[] args) {
  12.        Partida partida = new Partida();
  13.        Controlador c = new Controlador(partida,in);
  14.        c.run();
  15.        }
  16.     }


Resultado:


En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
Ocelot1994

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Duda Java (para noob)
« Respuesta #16 en: 15 Noviembre 2014, 00:01 am »

Le estuve echando un vistazo por encima y puede que me equivoque pero bueno alomejor el fallo que tienes ahí es en la variable fin.
Creo que tienes que igualar el fin a true ya sea en el if o en else sino te repetira el while hasta que le des a salir.
Si te fijas tienes el fin = true cuando tecleas salir y ahí el while no te va a seguir por lo tanto tendras que igualar la variable a true en otro bucle para que te salga y no te entre de nuevo.
En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Duda Java (para noob)
« Respuesta #17 en: 17 Noviembre 2014, 22:30 pm »

Lo siento, olvidé poner que ya he encontrado el fallo. Resulta que al entrar de nuevo en el while, el nextInt() cogía el "enter" cuando lo pulsas.

Dentro del while, así es como quedaría:

Código
  1. while (!fin){
  2. System.out.println(partida);
  3. String colorTurno = "turno de la ficha " + partida.colorFicha();
  4. System.out.println(colorTurno.toLowerCase());
  5. System.out.print("¿Que quieres hacer? ");
  6. String comando;
  7. comando = in.nextLine();
  8.  
  9. if(comando.equalsIgnoreCase("PONER")) {
  10.  
  11. System.out.print("Introduzca la columna: ");
  12. int c = this.in.nextInt();
  13. this.in.nextLine();

La línea 13 sería la instrucción añadida.
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
:. Duda NooB pero Inquietante .:
Scripting
Cy.neOh 1 2,200 Último mensaje 22 Octubre 2006, 23:54 pm
por Division-x
[duda NOOB] ¿Se podría blockear la pantalla del PC con un programa?
Software
pskkk 9 2,471 Último mensaje 2 Diciembre 2011, 21:39 pm
por Eleкtro
Duda de noob con bus de datos
Windows
apoeti 2 2,026 Último mensaje 17 Noviembre 2012, 13:38 pm
por apoeti
Ayuda Porfavor Soy Noob en Java
Java
EricEBP 9 3,398 Último mensaje 25 Abril 2014, 20:40 pm
por EricEBP
Duda con files C++ (Soy un noob)
Programación C/C++
pablovg9 5 2,372 Último mensaje 2 Agosto 2015, 21:13 pm
por pablovg9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines