2013-12-02 3 views
0

Я разрабатываю приложение нумерологии .. Там, где есть три текста редактирования, чтобы собирать имя пользователя, имя и фамилию, и среди этих значений принимается только первая цифра имени и все эти значения добавляются с помощью String builder .. и отображается результат вычисления. Приложение работает нормально, если пользователь вводит все имя, имя и фамилию, и если для некоторых людей не будет никакого среднего имени, поэтому, когда они делают расчет, например что приложение врезаться .. Просьба помочь ..Я я giivng код ниже ..Java Substring return 0

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; 

     } 
    } 

FirstA ctivity.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")); 


} 
} 
+0

Трассировка стека поможет. – Harry

+3

* «Я разрабатываю нумерологическое приложение ...» * - Ну, есть ваша ошибка :-) –

ответ

0

Это, вероятно, сбой, потому что среднее поле имени пустое длина 0, и вы пытаетесь получить символ из не существующего индекса. Вы можете использовать IsEmpty(), чтобы проверить, если строка MiddleName пуста или, по крайней мере 1 символ перед использованием метода подстроки

, например:

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

can u pls дать пример – roshanpeter

+1

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

+0

String aChar1 = ""; \t \t если \t \t { \t \t aChar1 = firstName.substring (0,1) (firstName.isEmpty()!); \t \t} \t \t еще \t \t { \t \t \t \t \t} – roshanpeter

0

Вероятно, из следующей строки:

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

Если MiddleName пусто это будет брошено в IndexOutOfBoundsException (см this link)

Либо улов это исключение или еще лучше, проверьте, является ли строка пустой до выполнения подстроки.