2017-01-03 2 views
1

Назначение добавления должно появляться после каждых трех цифр, смотрящих справа налево. Поэтому число 1000000 должно составлять 1 000 000 и т.д.Метод добавления запятых в цифровую строку в Java

У меня относительно хорошая идея, как решить эту проблему, но я понятия не имею, почему я не получаю выход. Возможно, я ошибаюсь, о чем я не знаю или что-то в этом роде.

Я думаю, что я понимаю концепцию того, что строки неизменяемы, поэтому их нельзя изменить на месте, и когда вы хотите что-то изменить в строку для создания нового строкового объекта. Но я не понимаю, как это возможно, то:

`result = ch + result;` 

и этот

result = "," + result;

Что я получаю здесь не так?

import acm.program.*; 
    import acm.util.*; 

    public class AddCommasToNumericString extends ConsoleProgram{ 

     public void run(){ 
      while(true){ 
       String digits = readLine("Enter a numeric string: "); 
       if (digits.length() == 0) break; 
       println(addCommasToNumericString(digits)); 
      } 
     } 

     public String addCommasToNumericString(String digits){ 
      String result = ""; 
      int counter = 0; 
      for (int i = digits.length()-1; i <= 0 ; i--){ 
       char ch = digits.charAt(i); 
       result = ch + result; 
       counter++; 
       if (counter % 3 == 0){ 
        result = "," + result; 
       } 
      } 
      return result; 
     } 
    } 
+1

'NumberFormat.getNumberInstance (Locale.US) .format (цифры)' выполнит задание. – bhantol

+0

@bhantol Да, конечно, но я подозреваю, что его назначение - это сделать это вручную, чтобы узнать, как работать со строками. –

+0

Yup thats почему я спросил так, что я не надену это легкое решение. – bhantol

ответ

2

Ваш for цикл никогда не выполняет, поскольку условие цикла неправильно. Условие должно быть i >= 0. Попробуйте это:

for (int i = digits.length()-1; i >= 0 ; i--) { 
    char ch = digits.charAt(i); 
    result = ch + result; 
    counter++; 
    if (counter % 3 == 0) { 
     result = "," + result; 
    } 
} 

Вы также можете устранить counter и использовать только переменный цикл, сделав небольшое изменение:

for (int i=1; i < digits.length(); ++i) { 
    char ch = digits.charAt(digits.length() - i); 
    result = ch + result; 
    if (i % 3 == 0) { 
     result = "," + result; 
    } 
} 
+1

Каждый раз, как это, я выполняю задание и всегда делаю эти проклятые печатные ошибки! Я Tnx Тим. – Miljan

0

преобразовать строку для чтения в целое, а затем отформатировать его в виде строки Строковые цифры = readLine («Введите числовую строку:»); Integer myInt = новое целое число (цифры); Строковый вывод = NumberFormat.getNumberInstance (Locale.US) .format (myInt.value());

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