Subcadena de Java devuelve 0
Frecuentes
Visto 350 veces
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"));
}
}
2 Respuestas
0
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
0
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 java android stringbuilder or haz tu propia pregunta.
el seguimiento de la pila ayudaría. - Harry
"Estoy desarrollando una aplicación de numerología..." - Pues ahí está tu error :-) - Stephen C