2014-12-06 2 views
-1

Я работаю над проблемой для класса, в котором пользователь вводит число, а если оно 1000 или более, вы должны добавить запятые. Поэтому, если пользователь поставил 12300, выход будет 12 300. Мне удалось выяснить, как это сделать для чисел ниже 1 миллиона, но когда я вводил число, подобное 1234567, он ничего не печатает. Вот код для метода:Пример Java Recursion

public static String commas(long l) { 
    String s = ""; 
    String pt1; 
    String pt2; 
    long pt1Number; 
    long pt2Number; 

    if (l < 1) { 
      return String.valueOf(l); 

    } else { 

     pt1Number = l/1000; 
     pt2Number = l % 1000; 

     if (pt1Number < 1000) { 
      pt1 = String.valueOf(pt1Number); 
      pt2 = String.valueOf(pt2Number); 
      s = pt1 + "," + pt2; 

     } else { 
      commas(pt1Number); 

     } 

    } 

    return s; 

} 

} 

Кто-нибудь видит, что может быть неправильно с моим кодом?

ответ

1

вы имели в виду это?

public static String commas(long input) { 
     if (input < 1000) { 
      return String.valueOf(input); 
     } else { 
      long pt1Number = input/1000; 
      long pt2Number = input % 1000; 
      return commas(pt1Number) + "," 
        + (pt2Number==0l?"000":String.valueOf(pt2Number)); 
      } 

    } 

некоторые проблемы в ваших кодах:

  • неправильное использование рекурсии, вы поняли, что
  • не проверял случай, если %1000==0, вы должны Concat 000, Э.Г. input=2000
  • избегает использовать l в качестве имени параметра для лучшей читаемости, выглядит так же, как 1
+0

да, спасибо за помощь. Но что именно означает «pt2Number == 0l?» 000: «do? Я еще не узнал, что еще –

+0

@BenjaminPorter 'c = condition? A: b'' => '' if condition true, c = a, else c = b' – Kent

0

В вашем else (когда pt1Number is> = 1000), вы ничего не делаете с результатом commas(pt1Number). Вы вызываете функцию и полностью игнорируете ее результат. Впоследствии вы возвращаете s, который по-прежнему пуст.

Может быть, вы имели в виду ...

else { 
    s = commas(pt1Number); 
} 

... вместо:

else { 
    commas(pt1Number); 
} 
+0

параметр мой длинный, но им возвращает строку (она должна быть, что путь для выполнения задания), поэтому я не думаю, что ваше предложение будет работать ... –

+0

Мое предложение состояло в том, чтобы делать _something_ с результатом 'commas (pt1Number);'. Например, сохраните его в 's'. Входной параметр не имеет значения. – AJPerez

0

Ваша программа не работает, по крайней мере, незначительные случаи т.е. на 11 выход 0,11 на 1000 выход является 1,0

измените свою логику соответственно ..

@Kent 1010 для этого вашего выхода является 1,10

согласно мне ваш код должен быть изменен, как показано ниже

public class Comma { 
public static String commas(long l) { 
    String s = ""; 
    long pt1Number;long pt2Number; 
    if (l < 1000) { 
      return String.valueOf(l); 
    } else { 
     pt1Number = l/1000; 
     pt2Number = l % 1000; 
     if (pt1Number < 1000) { 
      if (pt2Number == 0) { 
       s=pt1Number+","+"000"; 
      }else if(pt2Number>0 &&pt2Number<10) 
      { 
       s=pt1Number+","+"00"+pt2Number; 
      } 
      else if(pt2Number>9 &&pt2Number<100) 
      { 
       s=pt1Number+","+"0"+pt2Number; 
      } 
     } else { 

      if (pt2Number == 0) { 
       s=commas(pt1Number)+","+"000"; 
      }else if(pt2Number>0 &&pt2Number<10) 
      { 
       s=commas(pt1Number)+","+"00"+pt2Number; 
      } 
      else if(pt2Number>9 &&pt2Number<100) 
      { 
       s=commas(pt1Number)+","+"0"+pt2Number; 
      } 

     } 
     return s; 
    } 
} 
public static void main(String[] args) { 
    System.out.println(commas(1000009)); 
} 

}