Otra dudita de Java :D

Rezagado

Estoy haciendo un programilla en Java para el IOC (ciclo de DAW). Voy a intentar explicarlo lo mejor posible, el código está en catalán pero no creo que haya ningún problema para entenderlo.

El programa te va pidiendo una serie de datos, pero en el momento en el que llega al switch deja de funcionar. Y antes de que me lo digáis, según el enunciado que me han dado esa parte del código debe estar en switch si o sí.

Ilustro el problema a continuación. Al final del hilo dejo el código completo.

spoiler

Aquí os dejo el código entero:

spoiler

PD: He visto que no hay un hilo de dudas generales de Java, si a los moderadores les parece bien podríamos utilizar este hilo para ello.

pantocreitor

Ponle un default al switch para que si no entra en ninguno de los casos te tire el error

switch(expression) {
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block
    break;
}
1 respuesta
Rezagado

#2 Nada, no va xd

De todas formas, entiendo que esta parte de mi código ya hace esa función no? Establece un valor mínimo y un máximo y todo lo que se salga de eso debería dar error, o así lo entiendo yo.

No sé que es lo que está fallando.

GuaNaGe

¿Puedes pegar el error que te da?

1 respuesta
Rezagado

#4 Aquí por ejemplo si escribo otra cosa que no sea 0 el programa debería pararse, pero como ves escribo un 1 y lo da por bueno y salta a la siguiente línea.

B

Igual , es porque en el control de errores de la variable nivell, si esta validacion es correcta no entra en las que tiene en su interior ( fijate en como estan estableciadas las llaves del IF ). Tal vez querias hacerlo en ifs separados y los has anidado sin darte cuenta?

Edit: Es que de hecho cada IF de la validacion es "independiente" menos el primero que tiene anidados todos dentro, es eso correcto?

1 1 respuesta
Lafayette

Porque no Debuggeas? Pon un punto de interrupción en el switch y mira a ver como va llegando las variables.

Rezagado

#6 Era eso. Que grande, muchas gracias xd

1 respuesta
Rezagado

Luego tengo otro problema. Al final de todo necesito que el programa haga un resumen de todas las opciones escogidas con cadenas de texto y, evidentemente, no tengo ni puta idea de como hacerlo.

A unas malas lo que tenía pensado era hacer esto:

Así con todas las opciones y a pastar xd

B

#8 No se si el codigo lo tienes estructurado como has puesto en el post o si realmente tienes tabulado el codigo, en caso de que no tabules, es conveniente que cojas la costumbre, errores como el que te han ocurrido seran mucho mas visibles ;).

1 respuesta
Rezagado

#10 Te refieres a si el programa abre las llaves cada vez más hacia la derecha? Si es eso sí, pero es que no me gusta xD

1 respuesta
B

#11 Es mas facil leer lo tabulado, sobre todo cuando tienes mucho codigo, te iras acostumbrando xD

1 respuesta
Rezagado

#12 Así yo lo veo bien no?

Espero que no te refieras a esta atrocidad xd

2 respuestas
JuAn4k4

#13 Si, se refiere a esa atrocidad. Pero no es culpa de la tabulación, sino del codigo en si mismo que anida muchos bloques.

Lo tienes mal tabulados, dentro del if debería tener hueco.

Aprender lógica tampoco te vendría mal, en el ejemplo que has puesto es lo mismo que poner:

dataCorrect = núm == 1 || núm == 2 || núm == 3;

O algo de matemáticas:

dataCorrect = núm >= 1 && núm <= 3;
1 1 respuesta
Rezagado

#14 Lo tengo puesto así para que sea más visual, ya sé que es lo mismo

Kaledros

#13 Lo correcto es hacer un método para todo eso, meter sólo ifs y poner un return dentro de cada if. Pero como no veo que uses más que el main(), mejor usa else if en vez de un else con el if dentro del bloque. Te ahorras la mitad de indentaciones.

BaRtoZ

Si te dicen que indexes hazlo tío, se me revuelve es estómago de ver ese código. Esa aberración es una aberración porque su autor lo ha creado así y de un vistazo, un senior, te borrará el código para hacerlo más eficiente y conciso.

3 1 respuesta
Rezagado

#17 El código de lo que yo llamo atrocidad no es mío xd

1 respuesta
NoRelaX

Mi consejo de cara al futuro es que depures, sobre todo teniendo métodos con tanta lógica de if ó switch en su interior.
Si bien no te manejas todavía con las herramientas de debug, mete println a diestro y siniestro para ver por qué condiciones va entrando y por cuáles no, y así poder entender por qué falla.

El diseño de código lo mejorarás con el tiempo.

BaRtoZ

#18 Toma, te lo regalo. No le he dedicado mucho, pero me he entretenido. Mejóralo y nos lo traes si te apetece. Queda mucho por depurar.

Código
1 respuesta
pirobiro

Recomendáis algún libro - web para estudiar java? Estoy haciendo un curso, llevaré algo más de un mes y esque me entero de más bien poco, la teoría la puedo llegar a controlar, pero en cuanto me dicen, haz un programa, con una hoja en blanco, estoy totalmente bloqueado

2 respuestas
B

#21 https://java-programming.mooc.fi

Diviértete :D

1 2 respuestas
Rezagado

#20 Pero eso es demasiado avanzado, no entiendo nada xd

Abrí el Netbeans por primera vez en mi vida hace 1 mes...

2 respuestas
B

#23 Por el momento no te rayes, si en el ciclo vas a aprender cuatro tonterías, una vez te metas en el mundo laboral vas a tener que esforzarte mucho una vez lo termines, de momento céntrate en el ciclo.

Y no sé qué ves demasiado avanzado en la web de #22 si comienzan con el típico Hello World.

Kaledros

#21 Si controlas la teoría pero no sabes abordar un problema no necesitas aprender Java, necesitas aprender a pensar como un programador. Esto es, descomponer un problema en tareas atómicas y ordenarlas secuencialmente.

Por ejemplo, si te digo que me crees un programa que reciba una cadena de caracteres por parámetro, me busque las ocurrencias de un carácter concreto y me devuelva el número de veces que se repite, tú automáticamente tienes que pensar en estos pasos:

  • Paso 1: recibir la cadena y almacenarla para poder recorrerla.
  • Paso 2: recorrer la cadena.
  • Paso 3: una vez sepas recorrer la cadena, crear la lógica que compare el carácter en la posición actual con el de referencia.
  • Paso 4: almacenar de alguna forma la cantidad de veces que el paso 3 da resultado positivo.
  • Paso 5: devolver ese valor.

Y a los demás: es gente que está aprendiendo, ni siquiera saben lo que es un método, una clase o un objeto. La solución óptima aún no la conocen, hay que adaptar la respuesta a su nivel.

1 respuesta
pirobiro

#25 Ya me dijo un compi de por aquí, lo de usar el pseudocódigo y el siempre eso que tu has dicho más o menos, intentar organizar un programa primero en tu cabeza y luego poder plasmarlo en la hoja.

Tengo la buena suerte que mi profe nos explica todo con muchos objetos reales,y pone bastante hincapie justo en eso, en los métodos,clases y en el objeto y como toda la programación de java está orientada a esto, y a la abstracción en general...

Y si, creo que tienes razón, que me falta eso, y supongo que una de las mejores cosas para conseguir eso,es picando código y viendo código,porque ya te digo, cuando me pongo a ojear un libro,y me hablan de los bucles, métodos y objetos y digo,vale, lo se, pero luego me pongo y digo, como coño era justo esto,o el tema de private,public y demás....

Muchas gracias gente!

BaRtoZ

#23 Pero si lo he reducido bastante poco (o nada) para que entendieras un pelín. Si aprendes a usar el debugger en NetBeans aprenderás a programar x10 de velocidad. De todas formas coge ideas de lo que te he pasado y llévatelo a tu código... El bucle While es lo que te permite insistir al usuario en una respuesta correcta y la gestión de respuestas te la he centralizado en un método, para que sea más visible y accesible.

El debugger te permite ir línea a línea viendo qué se está haciendo y qué valores toman las variables.

1 respuesta
Rezagado

#27 Estoy en el movil, luego lo miro.

De todas formas no se trata de complicarlo todo, es un ejercicio para el ciclo que tengo que entregar la semana que viene, no estoy haciendo un programa por mi cuenta.

Tema cadenas de momento solo necesito saber como hacer para que el programa imprima en pantalla las opciones que ha escogido el usuario en una misma línea. El resto del código es con if, else y switch que es lo que he aprendido hasta ahora.

PD: Y si, el debugger de hecho ya lo he utilizado en un ejercicio anterior, no había caído.

1 respuesta
BaRtoZ

#28

El resto del código es con if, else y switch

Pues con eso está hecho... De todas formas has venido a pedir ayuda y te he dado el ejercicio que buscas, si de un vistazo desde el móvil lo descartas porque es complicado, dejas mucho que desear. Y de nada.

1 respuesta
Rezagado

#29 Yo no he pedido que nadie me haga el ejercicio, solo quería saber porque no estaba funcionando. Tampoco he dicho que descarte nada.

Usuarios habituales

  • desu
  • JuAn4k4
  • Flashk
  • Kaledros
  • pirobiro
  • BaRtoZ
  • Rezagado