Subcadena de Java devuelve 0

Estoy desarrollando una aplicación de numerología... Donde... hay tres textos de edición para recopilar el nombre, el segundo nombre y el apellido de los usuarios... y entre estos valores solo se toma el primer dígito del nombre y todos estos valores se agregan usando el generador de cadenas .. y se muestra un resultado calculado.. La aplicación funciona bien si el usuario ingresa todo el nombre, segundo nombre y apellido y si para algunas personas no habrá segundo nombre, entonces cuando hacen un cálculo así, la aplicación se bloquea.. por favor ayuda... Estoy dando el siguiente código...

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    public void gReport(View V) 
    {
        EditText et1 = (EditText) findViewById (R.id.editText1);
        EditText et2 = (EditText) findViewById (R.id.editText2);
        EditText et3 = (EditText) findViewById (R.id.editText3);
        TextView tv1 = (TextView) findViewById (R.id.textView1);

        long sum2 = 0;

        String firstName = et1.getText().toString();
        String middleName = et2.getText().toString();
        String lastName = et3.getText().toString();
        String aChar1 = firstName.substring(0,1);
        String aChar2 = middleName.substring(0,1);
        String aChar3 = lastName.substring(0,1);

        StringBuilder sb= new StringBuilder();
        sb.append(aChar1);

        sb.append(aChar2);
        sb.append(aChar3);
        String aChar = sb.toString();
        sum2 = getSum(String.valueOf(aChar));


        tv1.setText(String.valueOf(aChar));
        Intent in = new Intent(this, FirstActivity.class);
        in.putExtra("name2",sum2 + "");
        startActivity(in);


    }




    private long getSum(String text) {
        // TODO Auto-generated method stub
        long sum2 = 0;
        char[] name2 = new char[text.length()];

               name2 = text.toCharArray();

               for(int i=0; i<text.length(); i++)
               {
                   sum2 += value2( name2[i] );
                }
                 while (sum2>9)            

               {              

                   sum2 = findDigitSum2(sum2);

               }
        return sum2;
    }

    private long findDigitSum2(long n) {
        // TODO Auto-generated method stub
        int sum2=0;
        while (n != 0) 
        {
         sum2 += n % 10;
         n = n / 10;
        }
        return sum2;
    }

    private long value2(char a) {
        // TODO Auto-generated method stub
        switch(a)
        {
           case 'A':return 1;    
           case 'B':return 2;
           case 'C':return 3;
           case 'D':return 4;
           case 'E':return 5;
           case 'F':return 6;
           case 'G':return 7;
           case 'H':return 8;
           case 'I':return 9;
           case 'J':return 1;
           case 'K':return 2;
           case 'L':return 3;
           case 'M':return 4;
           case 'N':return 5;
           case 'O':return 6;
           case 'P':return 7;
           case 'Q':return 8;
           case 'R':return 9;
           case 'S':return 1;          
           case 'T':return 2;
           case 'U':return 3;
           case 'V':return 4;
           case 'W':return 5;
           case 'X':return 6;
           case 'Y':return 7;
           case 'Z':return 8;
           default:return 0;

        }
    }

PrimeraActividad.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.firstactivity_xm);







        TextView tv2 = (TextView) findViewById (R.id.textView2);

        tv2.setText(getIntent().getStringExtra("name2"));


}
}

preguntado el 02 de diciembre de 13 a las 08:12

el seguimiento de la pila ayudaría. -

"Estoy desarrollando una aplicación de numerología..." - Pues ahí está tu error :-) -

2 Respuestas

Probablemente debido a la siguiente línea:

String aChar2 = middleName.substring(0,1);

Si el middleName está vacío, se generará una excepción IndexOutOfBoundsException (ver este enlace)

Capte esta excepción o, mejor aún, verifique si la cadena está vacía antes de realizar la subcadena.

Respondido el 02 de diciembre de 13 a las 08:12

Probablemente se bloquee porque el campo del segundo nombre está vacío y la longitud es 0, y está tratando de obtener un carácter de un índice que no existe. Puede usar isEmpty() para verificar si la cadena middleName está vacía o tiene al menos 1 carácter antes de usar el método de subcadena

por ejemplo:

String aChar2 = ""; 
if (!middleName.isEmpty())
{
   aChar2 = middleName.subString(0,1);
}

Respondido el 02 de diciembre de 13 a las 09:12

¿Puedes dar un ejemplo? roshanpeter

Cadena aChar2 = ""; if (!middleName.isEmpty()) { aChar2 = middleName.subString(0,1);) - Alex

Cadena aChar1 = ""; if (!firstName.isEmpty()) { aChar1 = firstName.substring(0,1); } demás { } - roshanpeter

Es correcto, pero no necesita el else, porque no hace nada en ese else, por lo que puede eliminarlo. - Alex

Depure un poco, ahora conoce la teoría, debería poder resolverla. Además, "ahora no funciona" no es una forma adecuada de describir su problema. ¿Qué no está funcionando? ¿Dónde obtienes un error? - Alex

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.