2016-12-05 1 views
0

Comment puis-je convertir une chaîne Spinner valeurs telles que "20-34", 35-44 "etc en entier de 20 à 34, entier de 35 à 44 en android.Below est le code pour prendre des valeurs entières de filage et en attribuant des points pour un calcul de mathématiquesConvertir les valeurs de chaîne Spinner "20-34" comme un entier de 20 à 34 dans android

public static int age_value(String gender, String ag) { 

    int b; 
    b = Integer.parseInt(ag); 
    if (gender.equals("f")) { 
     if (20 <= b && b <= 34) { 
      ageValue = -7; 
     } else if (35 <= b && b <= 39) { 
      ageValue = -3; 
     } else if (40 <= b && b <= 44) 
      ageValue = 0; 
     else if (45 <= b && b <= 49) 
      ageValue = 3; 
     else if (50 <= b && b <= 54) 
      ageValue = 6; 
     else if (55 <= b && b < 59) 
      ageValue = 8; 
     else if (60 <= b && b <= 64) 
      ageValue = 10; 
     else if (65 <= b && b <= 69) 
      ageValue = 12; 
     else if (70 <= b && b <= 74) 
      ageValue = 14; 
     else if (75 <= b && b <= 79) 
      ageValue = 16; 

    } else if (gender.equals("m")) { 
     if (20 <= b && b <= 34) { 
      ageValue = -9; 
     } else if (35 <= b && b <= 39) { 
      ageValue = -4; 
     } else if (40 <= b && b <= 44) 
      ageValue = 0; 
     else if (45 <= b && b <= 49) 
      ageValue = 3; 
     else if (50 <= b && b <= 54) 
      ageValue = 6; 
     else if (55 <= b && b < 59) 
      ageValue = 8; 
     else if (60 <= b && b <= 64) 
      ageValue = 10; 
     else if (65 <= b && b <= 69) 
      ageValue = 11; 
     else if (70 <= b && b <= 74) 
      ageValue = 12; 
     else if (75 <= b && b <= 79) 
      ageValue = 13; 

    } 


    return ageValue; 


} 

ci-dessous montre la centrifugeuse à laquelle le procédé ci-dessus est ajouté

int array1 = R.array.gender; 
    // final String[] gender1 = getResources().getStringArray(R.array.gender); 
    final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getApplicationContext(), array1, R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(R.layout.spinnerdrop); 
    Gender.setAdapter(adapter); 
    Gender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      rowgender = parent.getItemAtPosition(position).toString(); 


      if(rowage!=null && rowgender!=null) { 
       MainActivity.age_value(rowgender, rowage); 
      } 

      Gender.setSelection(position); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 

    }); 

mais il montre une erreur

java.lang.NumberFormatException: Invalid int: "20-34"

+0

'-' n'est pas un' int', utilisation fractionnée puis analyser ou votre logique peut être simplifiée en utilisant la position de la valeur sélectionnée de spinner comme 'si (position == 0) ageValue = -7; ' –

+0

Que voulez-vous Une liste de nombres entre 20-34 ou juste 2 nombres 20 et 34? – TheLostMind

+0

'-' n'est pas un nombre entier. –

Répondre

1

Utiliser la chaîne méthode split() pour le faire

String ag = "20-34"; 
String[] value = ag.split("-"); 

int b= Integer.parseInt(value[0]);// here value 20 
int c= Integer.parseInt(value[1]);// here value 34 

Effectuez ensuite vos opérations

if (20 <= b && c <= 34) { 
     ageValue = -7; 
    } else if 
    .... 
    .... 
+0

Merci beaucoup! –

1

Vous pouvez utiliser Java 8 IntStream.range:

public static void main(String[] args) throws Exception { 
    String s = "20-34"; 
    int start = 0; 
    int end = 0; 
    if (s.matches("\\d+-\\d+")) { // Check if input String is in correct format 
     String[] arr = s.split("-"); // split based on "-"     
     start = Integer.parseInt(arr[0]); // get start range 
     end = Integer.parseInt(arr[1]); // get end range 
    } 

    List<Integer> nums = IntStream.range(start, end).boxed().collect(Collectors.toList()); // use IntStream.range method to generate range. 
    System.out.println(nums); 
} 

O/P:

[20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33] 

Il y a plusieurs façons de le faire.

Vous pouvez aussi le faire:

List<Integer> nums = new ArrayList<>(); 
    IntStream.range(start, end).forEach(nums::add); 
    System.out.println(nums);