2013-08-08 2 views
1

Я создал приложение для Android, которое получает и читает SMS-сообщения.
На данный момент приложение читает в SMS и преобразует его в массив из 8 символов, так как он будет получать сообщения только из 8 символов. например, сообщение может быть «AbCdEfGh», которое будет преобразовано в [A] [b] [C] [d] [E] [f] [G] [h].
Вывод комбинации различных значений массива в зависимости от того, что было введено

if (array[0] == 'a'){ 
       this.abortBroadcast(); 
       Toast.makeText(context, "a", Toast.LENGTH_LONG).show(); 
       context.sendBroadcast(in); 
      } 
      else if (array[0] == 'A'){ 
       //this.abortBroadcast(); 
       //Toast.makeText(context, "A", Toast.LENGTH_LONG).show(); 
       //context.sendBroadcast(in); 
      } 
      else if (array[1] == 'b'){ 
       this.abortBroadcast(); 
       Toast.makeText(context, "b", Toast.LENGTH_LONG).show(); 
       context.sendBroadcast(in); 
      } 
      else if (array[1] == 'B'){ 
       this.abortBroadcast(); 
       Toast.makeText(context, "B", Toast.LENGTH_LONG).show(); 
       context.sendBroadcast(in); 
      } 

То, что я хочу, чтобы приложение, чтобы сделать, это прочитать каждый из этих символов и сделать что-то в зависимости от того, если символ в верхнем или нижнем регистре. Например, если [0] равно 'a', тогда сделайте что-то, иначе, если [0] равно [A], тогда сделайте что-нибудь, а затем перейдите и проверьте следующий элемент.

Я хотел бы, чтобы он прошел через каждый элемент массива и сделал что-то для каждого символа в сообщении, в настоящее время приложение будет показывать «a» для «a» и «A» для «A» отлично, проблема в том, что если вы введете «ab», он будет показывать только «a», а не «ab». он будет отображать только вторую букву, если вы введете первый как пустой, например, «b» вернет «b».

Как я могу упорядочить свой код так, чтобы он выбирал и показывал комбинацию массивов ?? конечно, мне не нужно просто кодировать каждую возможную комбинацию из 8 символов, которые могут быть задействованы? Может ли решение switch быть решением? Можно ли реализовать какой-то цикл, чтобы после того, как он посмотрел на первый элемент массива, он циклически поворачивается и смотрит на следующий элемент? Извиняюсь, если я не объяснил это очень четко! надеюсь, кто-то с немного большим опытом, чем я, сможет решить эту проблему. Спасибо за любую помощь.

+0

вы пытаетесь соответствовать два символа в то время, с одним символом, который не возможно, с кодом, поэтому при вводе «Ab» в [0] это будет соответствовать и закончится, когда у вас есть "b" будет соответствовать [1] == 'b', вы получаете его – user2408578

+1

да это правильно. я бы хотел, чтобы он продолжал искать другое письмо, как только он решил, является ли [0] «A» или «a». так [0] == 'a'? то сделайте это, а затем продолжайте и делайте, делает ли [1] == 'b'? то сделайте это – AndroidCB

+1

, так что я должен сказать, что делать для каждой возможной комбинации из 8 разных персонажей? конечно, есть способ обойти это? – AndroidCB

ответ

1

Просто поместите точку с запятой в конце вашего, если другое заявление, то код будет вести к следующему, если заявлению вместо остановки.

if (array[0] == 'a'){ 
     this.abortBroadcast(); 
     Toast.makeText(context, "a", Toast.LENGTH_LONG).show(); 
     context.sendBroadcast(in); 
    } 
    else if (array[0] == 'A'){ 
     //this.abortBroadcast(); 
     //Toast.makeText(context, "A", Toast.LENGTH_LONG).show(); 
     //context.sendBroadcast(in); 
//insert semi colon after } below: 
}; 
+1

Работает отлично! Спасибо! – AndroidCB

0

Вы используете инструкцию if-else в своем коде. Когда массив [0] равен a, он не будет проверять массив условий [1] == 'B'.

 if (array[0] == 'a'){ 
      this.abortBroadcast(); 
      Toast.makeText(context, "a", Toast.LENGTH_LONG).show(); 
      context.sendBroadcast(in); 
     } 
     else if (array[0] == 'A'){ 
      //this.abortBroadcast(); 
      //Toast.makeText(context, "A", Toast.LENGTH_LONG).show(); 
      //context.sendBroadcast(in); 
     } 
     if (array[1] == 'b'){ 
      this.abortBroadcast(); 
      Toast.makeText(context, "b", Toast.LENGTH_LONG).show(); 
      context.sendBroadcast(in); 
     } 
     else if (array[1] == 'B'){ 
      this.abortBroadcast(); 
      Toast.makeText(context, "B", Toast.LENGTH_LONG).show(); 
      context.sendBroadcast(in); 
     } 
+0

да, а что было бы другим способом сделать это/путь вокруг нее/решение проблемы? – AndroidCB

0

мощь поможет,

Declare arr as String in your function and call this method as 
getArr(arr.charAt(0),arr); 



getArr(char choice,arr) 
{ 
    static int i=-1; 
    i++; 
    if(i>=arr.length()) 
    return; 
    switch(choice) 
    { 
case a: 
    getArr(arr.charAt(i),arr); 
    //do something 
     this.abortBroadcast(); 
     Toast.makeText(context, arr.substring(0,i+1),Toast.LENGTH_LONG).show();  
     context.sendBroadcast(in); 
     //do above for all do something 
    break; 
case b: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case c: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case d: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case e: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case f: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case g: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case h: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case A: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case B: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case C: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case D: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case E: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case F: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case G: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 
case H: 
    getArr(arr.charAt(i),arr); 
    //do something 
    break; 

} }

+0

Назовите это как getArr (arr [0], arr); – user2408578

+0

Я дам ему попробовать – AndroidCB

+1

Не могли бы вы объяснить, как я буду реализовывать это в своем коде? – AndroidCB

1

Почему не цикл через массив, добавьте значение каждого элемента массива в строку, а затем показать строку в конце ? Что-то вроде этого:

 StringBuilder sb = new StringBuilder(); 

     for(int i = 0; i < array.length; i++) 
     { 
      if (array[i] == 'a'){ 
       this.abortBroadcast(); 
       //Toast.makeText(context, "a", Toast.LENGTH_LONG).show(); 
       sb.append("a"); 
       context.sendBroadcast(in); 
       if(array[i+1] == 'b') 
       { 
        //do whatever you want down here after finding a combination... 
       } 
      } 
      else if (array[i] == 'A'){ 
       //this.abortBroadcast(); 
       //Toast.makeText(context, "A", Toast.LENGTH_LONG).show(); 
       //sb.append("b"); 
       //context.sendBroadcast(in); 
      } 
      //... 
      //and so on... 
     } 
     Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); 
+0

это все равно означало бы пройти через все возможные комбинации A-H, верхний нижний регистр, не так ли? – AndroidCB

+0

Наверное, да. Если вы хотите сделать другое действие для каждой отдельной комбинации, вам все равно придется кодировать 64 разных действия, которые звучат довольно утомительно. Возможно, вы можете просто проверить всю строку, а не перебирать каждую комбинацию. – Logan

+0

Это будет очень утомительно и просто кажется таким длинным, пронумерованным способом сделать это:/как я подумал об этом в моем: возьмите SMS-строку, преобразуйте ее в массив из 8 символов, проверьте первый элемент (это верхний или нижний регистр), сделайте что-нибудь, перейдите к следующему элементу – AndroidCB