2017-02-15 20 views
0

ОК, поэтому цель моей программы (очень простая в этой точке) - взять строку слов, например: («Я даю вам 34, а вы дадите мне 50»,), и я хочу, чтобы заполнить мой массив с каждым вхождением числа в строке. все это возвращает мне последнее число, которое я даю коду ive, проверил весь массив, и все, что я могу вернуть, - это последнее число.Не могу получить мою программу, чтобы взять более одного целого

public static void main(String[] args) throws IOException { 
    BufferedReader read= new BufferedReader(new InputStreamReader(System.in)); 
    String phrase; 
    int count = 0; 
    int[] numbers = new int[5]; 
    phrase = read.readLine(); 
    for (int i = 0; i < phrase.length()-1; i++){ 
     if (phrase.substring(i).matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")){ 
      numbers[count] = Integer.parseInt(phrase.substring(i)); 
      count++; 
      System.out.println(numbers[0]); 
     } 
    } 
} 
+0

Не стоит ваше регулярное выражение просто "[0-9] +" –

+0

Почему вы ловите плавающие числа и используете 'parseInt'? –

+1

Не может быть связано. 'System.out.println (числа [count]);' перед count ++? –

ответ

1

Некоторые вещи, чтобы указать.

  • Я не знаю, почему вы используете substring метод на входе.

  • Вы печатали только numbers[0]. Массив в любом случае не очень хорош, потому что вы никогда не знаете, сколько цифр будет иметь вход.

  • Вы используете parseInt, когда вы группируете десятичные числа.

  • Pattern & Matcher будет рекомендовано более String#matches


Вот исправленный код

List<Double> numbers = new ArrayList<>(); 
Pattern p = Pattern.compile("([-+]?[0-9]+(?:\\.[0-9]+)?)"); 

String phrase = "I give you 30, you give me 50. What about 42.1211?"; 
Matcher m = p.matcher(phrase); 

while (m.find()) { 
    numbers.add(Double.parseDouble(m.group())); 
} 

System.out.println(numbers); // [30.0, 50.0, 42.1211]