2012-01-09 3 views
0

В принципе, у меня есть строка ввода, моя тестовая строка - «5 + 4», и я хочу проверить символ по символу, чтобы создать список в форме [5, +, 4 ], т.е. белые пробелы игнорируются. Кроме того, если моя тестовая строка была «567 + 5-1», она выводит [567, +, 5, -, 1], объединяя числа вместе. К сожалению, это не позволит мне сделать .add(inputChar) моим returnValue, говоря, что символ не найден ... любые идеи?Java .add (значение) со списками

import java.util.*; 

public class CharacterArray { 
    public List<String> splitToChar(String s) { 
     List<String> returnValue = new LinkedList<String>(); 
     char[] chars = s.toCharArray(); 
     System.out.println(chars); 
     int currentNumber; 
     for (char inputChar : chars) { 
      if (Character.isDigit(inputChar) == true) { 
       currentNumber += inputChar; 
      } else if (inputChar == '.') { 
       currentNumber += inputChar; 
      } else if (inputChar == '+') { 
       returnValue.add(inputChar); 
      } else if (inputChar == '-') { 
       returnValue.add(inputChar); 
      } else if (inputChar == '/') { 
       returnValue.add(inputChar); 
      } else if (inputChar == '*') { 
       returnValue.add(inputChar); 
      } else if (inputChar == '(') { 
       returnValue.add(inputChar); 
      } else if (inputChar == ')') { 
       returnValue.add(inputChar); 
      } else { 
       System.out.println("Incorrect input symbol"); 
      } 
     } 
     return returnValue; 
    } 
} 
+6

Если вы гарантированный пробел, почему бы просто не разделить на пробелы? Кроме того, вы можете использовать переключатель. И проверьте все условия сразу, так как все они делают точно то же самое. Кроме того, довольно уверен, что 'currentNumber + = inputChar' не то, что вы хотите. –

+0

* «Я хочу проверить персонажа по персонажам» * Какова конечная цель этого? Это академическое упражнение, домашнее задание? Если нет, обратите внимание, что версия ECMAScript (JavaScript) ['ScriptEngine'] (http://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngine.html) может * оценить * строку выражения. –

+0

Я не являюсь защищенным пробелом, я не согласен с этим. Спасибо – Coolmurr

ответ

1
import java.util.*; 

public class CharacterArray { 
    public List<String> splitToChar(String s) { 
     List<String> returnValue = new LinkedList<String>(); 
     char[] chars = s.toCharArray(); 
     System.out.println(chars); 
     String currentNumber = ""; 
     for (char inputChar : chars) { 
      if (Character.isDigit(inputChar) == true) { 
       currentNumber += inputChar; 
      } else if (inputChar == '.' || 
        inputChar == '+' || 
        inputChar == '-' || 
        inputChar == '/' || 
        inputChar == '*' || 
        inputChar == '(' || 
        inputChar == ')') { 
       if (currentNumber.length() > 0){ 
        returnValue.add(currentNumber); 
       } 
       currentNumber = ""; 
       returnValue.add(""+inputChar); 
      } else { 
       System.out.println("Incorrect input symbol"); 
      } 
     } 
     if (currentNumber.length() > 0){ 
      returnValue.add(currentNumber); 
     } 
     return returnValue; 
    } 
} 

Кстати, ваш currentNumber должна быть строка

+0

Это приведет к удалению последней строки, если ее число. –

+0

А, да, пропустили это. После цикла for проверьте длину текущего номера. Если оно> 0, добавьте его в список. –

+0

Вы также должны проверить перед каждым символом. например '5 * -3' –

1

как насчет .add(String.valueOf(inputChar))?

+0

Спасибо! Это сработало. – Coolmurr

0

returnValue является List<String>, но вы пытаетесь добавить в список char. Вы можете исправить это путем преобразования inputChar в String при добавлении его в список с помощью String.valueOf(inputChar).

+0

Вы не можете наложить символ на строку. –

+0

@ RogerLindsjö спасибо, я исправил свой ответ – murgatroid99

1

Вы не можете добавить char к List<String> возможно, что вы пытаетесь сделать, это как

String currentNumber = ""; 
for (char inputChar : chars) { 
    if (Character.isDigit(inputChar) || inputChar == '.') { 
     currentNumber += inputChar; 
    } else if ("+-/*()".indexOf(inputChar) >= 0) { 
     if (currentNumber.length() > 0) returnValue.add(currentNumber); 
     currentNumber = ""; 
     returnValue.add("" + inputChar); 
    } else if (inputChar != ' ') { 
     System.out.println("Incorrect input symbol '"+inputChar+"'"); 
    } 
} 
if (currentNumber.length() > 0) returnValue.add(currentNumber); 
+0

Такая же проблема с currentNumber + = inputChar. –

+0

@DaveNewton, справедливая точка, я не хотел писать всю его программу для него. ;) –

+0

Я всегда думал, что домашние задания должны использовать бугарина, просто не знаете, как это можно сделать. –

Смежные вопросы