Foro de elhacker.net

Programación => Java => Mensaje iniciado por: chriwasch en 22 Diciembre 2013, 17:53 pm



Título: Problemas con un break. AYUDA POR FAVOR!
Publicado por: chriwasch en 22 Diciembre 2013, 17:53 pm
Hola! Estoy haciendo un ejercicio en el cual tengo un string (en este caso: "-5, 20, abc, -20, defg, 45ab67, 23") y tengo que devolver un int array solo con los numeros positivos del string.

lo primero que hice fue un metodo (istZiffer) para saber si un char es un digito (con digito me refiero a un numero).

despues hice otro metodo (subStrings) que primero separa los elementos del del string por cada ", " que haya y los meta en un string array. Despues el metodo va a coger cada elemento del string array y va a crear un char array con los caracteres del elemento. Despues se va a probar  con un for, caracter por caracter con el metodo istZiffer si es digito o no. Si no es digito, una variable boolean m que ya habia declarado antes, va a ser falsa y si si es digito la variable boolean m va a ser verdadera. Aqui es donde tengo el PROBLEMA: una vez que un solo caracter ya no sea digito, por lo tanto la vareable boolean m va a ser falsa, he puesto un if despues de esto, que si la variable m es falso entonces break. Aqui esperaría que se acabe el for y vaya al siguiente elemento del string array. Pero cuando corro el debug no hace esto sino que sigue el for (osea con el siguiente caracter del elemento en el que ya estabamos y como ya habia salido que una caracter no era cifra ya queria descartarlo y seguir con el siguiente elemento)

Talvez puse en el lugar incorrecto el break (aunque según yo no jaja) o no tenga que usar break sino otra cosa. Espero que alguien me pueda ayudar, gracias


PD: perdón que los nombres de las variables esten en alemán jaja.


Código
  1.  
  2.  
  3.  
  4. public class Aufgabe1 {
  5.  
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8.  
  9.  
  10. String zeichenkette = "-5, 20, abc, -20, defg, 45ab67, 23";
  11.  
  12. int [] subStrings = subStrings(zeichenkette);
  13.  
  14. for(int x=0; x<subStrings.length; x++){
  15. System.out.println(subStrings[x]);
  16. }
  17.  
  18. }
  19.  
  20.  
  21. public static boolean istZiffer(char ch){
  22. boolean b = Character.isDigit(ch);
  23. return b;
  24. }
  25.  
  26.  
  27.  
  28. public static int [] subStrings(String zeichenkette){
  29.  
  30. String[] elementen = zeichenkette.split(", ");
  31. boolean m;
  32. int a = 0;
  33. for(int x=0; x<=elementen.length-1; x++){
  34. char[] zeichen = elementen[x].toCharArray();  
  35. for(int z=0; z<=zeichen.length-1; z++){
  36. char zeich = zeichen[z];
  37. if(istZiffer(zeich)==false){
  38. m = false;
  39. }else{
  40. m = true;
  41. }
  42. if(m = false){
  43. break;
  44. }
  45. }
  46.  
  47. if(m = true){
  48. a++;
  49. }
  50. }
  51.  
  52. int [] subStrings = new int [a];
  53. int y = 0;
  54. for(int x=0; x<=elementen.length-1; x++){
  55. char[] zeichen = elementen[x].toCharArray();
  56. for(int z=0; z<=zeichen.length-1; z++){
  57. if(istZiffer(zeichen[z])==false){
  58. m = false;
  59. }else{
  60. m = true;
  61. }
  62. if(m = false){
  63. break;
  64. }
  65. }
  66. if(m = true){
  67. int zahl = Integer.parseInt(elementen[x]);
  68. subStrings[y] = zahl;
  69. y++;
  70. }
  71. }
  72. return subStrings;
  73. }
  74.  
  75.  
  76.  
  77. }


Título: Re: Problemas con un break. AYUDA POR FAVOR!
Publicado por: ~ Yoya ~ en 22 Diciembre 2013, 22:30 pm
break sale del loop actual, pero el loop donde ejecutas el break esta dentro de otro loop que sigue ejecutándose.

Ejemplo:

Código
  1. public class ehn {
  2.  
  3.  
  4. public static void main(String args[]) {
  5.  
  6. for(int i = 0;i<10;i++) {
  7. System.out.println("Loop padre - Ejecucion #"+i);
  8.  
  9. for(int x = 0;x<10;x++) {
  10. System.out.println("\tLoop hijo - Ejecucion #"+x);
  11. break;
  12.  
  13. }
  14.  
  15.  
  16. }
  17. }
  18. }

Output:
Código:
Loop padre - Ejecucion #0
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #1
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #2
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #3
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #4
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #5
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #6
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #7
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #8
Loop hijo - Ejecucion #0
Loop padre - Ejecucion #9
Loop hijo - Ejecucion #0


Solucion

Código
  1. package main;
  2.  
  3.  
  4. public class ehn {
  5.  
  6.  
  7. public static void main(String args[]) {
  8.  
  9. padreLoop:
  10. for(int i = 0;i<10;i++) {
  11. System.out.println("Loop padre - Ejecucion #"+i);
  12.  
  13. for(int x = 0;x<10;x++) {
  14. System.out.println("\tLoop hijo - Ejecucion #"+x);
  15. break padreLoop;
  16.  
  17. }
  18.  
  19.  
  20. }
  21. }
  22. }

Output:
Código:
Loop padre - Ejecucion #0
Loop hijo - Ejecucion #0

Saludos.


Título: Re: Problemas con un break. AYUDA POR FAVOR!
Publicado por: chriwasch en 23 Diciembre 2013, 16:24 pm
Hola, gracias por la respuesta! Pero ya encontre mi error, el break estaba en el lugar correcto, pero en esta parte

    if(m = false){
               break;
            }

tenía que poner con doble igual

    if(m == false){
               break;
            }

y antes cuando declaro la variable boolean m, declararla como true.