Блог пользователя stould

Автор stould, 13 лет назад, По-английски
I want to know where is the error on my return...

I cant find the error, and the output result is equals to expected result.

o.O

Someone can help me ?

Thanks;
  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

strange output:  System.out.println(ans.replace(" ", " "));

if there is 2 spaces, why there can't be 3 ?

int prev =  -1;

while (prev != ans.length()) {

prev = ans.length();

ans = ans.replace("  ", " "); // "XX", "X" replace 2 spaces by 1

}

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
If you are using java, I dare to recommend you use this problem for practicing regexps. (Surely you can sooner or later solve it without regexps, but regexp solution is far shorter.)

By the way it is more important due to mistake pointed out by goo.gl_SsAhv - you may use ans.replaceAll("\\s+", " ") instead to avoid this mistake - and see - here you also use regexps, though in rudimentary form.
  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    I think, that it is more important to find error, than find another solution (especially I do not like answers like: "I have no idea why your code is not working, mine is working fine.").

    If you find another solution you don't know whether your implementation or idea of your solution was wrong, however when you find bug in your implementation you learn more (there is smaller chance to repeat the bug again).

    On the other hand, in enterprise programming I do not prefer short solution against the more understandable, but in contest the shorter code is better.
    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      That is correct. However I did not mean to stop searching for bug (because it was shown by goo.gl_SsAhv), I only meant to try several different solutions for the same problem.

      On the other hand, in enterprise programming I do not prefer short solution against the more understandable

      It is correct too. However, for string-processing regexp solution could be both more clear and short (though may be less efficient) than imperative. Consider discussed solution of topicstarter and one with regexps (I do not mean it is best approach - here are other regexless solution, short enough).
»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
It was really difficult to find, but this is the counter example
A       . B   . C
  • »
    »
    13 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    Follow new correctly solution:


    1. import java.util.Scanner;

    2. public class B {
    3.     public void solve() {
    4.         Scanner sc = new Scanner(System.in);
    5.         String mn = sc.nextLine();
    6.         String ret = "";
    7.         if (mn.contains(".")) {
    8.             int indPartint = mn.indexOf(".");
    9.             int indPartFrac = mn.indexOf(".") + 1;
    10.             String partInt = "";
    11.             partInt = mn.substring(0, indPartint);
    12.             int count = 0;
    13.             String partFrac = "";
    14.             while (count < 2 && indPartFrac + count <= mn.length()) {
    15.                 partFrac += "" + mn.charAt(indPartFrac++);
    16.                 count++;
    17.             }
    18.             int MOD = partInt.length() % 3;
    19.             ret += "";
            for(inti = 0;i < partInt.length();i +  + ){
              if((i%3) - MOD =  = 0&&i! = 0){
                ret +  = (", " + partInt.charAt(i));
              }else{
                ret +  = partInt.charAt(i);
              }
            }
            if(Long.parseLong(partFrac) =  = 0){
              ret +  = ".00";
            }else{
              while(partFrac.length() < 2)
                partFrac +  = "0";
              ret +  = "." + partFrac.substring(0, 2);
            }
          }else{
            ret +  = "";
    20.             int MOD = (mn.length()) % 3;
    21.             for (int i = 0; i < mn.length(); i++) {
    22.                 if ((i % 3) - MOD == 0 && i != 0) {
    23.                     ret += "," + mn.charAt(i);
    24.                 } else {
    25.                     ret += mn.charAt(i);
    26.                 }
    27.             }

    28.             ret += ".00";
    29.         }
    30.         if (mn.contains("-") && ret.charAt(2) == ',') {
    31.             ret = ret.substring(0, 1) + ret.substring(3, ret.length());
    32.         }
    33.         ret = ret.replace("-", "");
    34.         if (!mn.contains("-")) {
    35.             System.out.println(ret);
    36.         } else {
    37.             System.out.println("(" + ret + ")");
    38.         }
    39.     }

    40.     public static void main(String[] args) {
    41.         new B().solve();
    42.     }
    43. }