数字不会增加

时间:2011-04-19 09:11:09

标签: java

首先我的回复增加我知道是不正确的。我不知道该怎么做。当我遇到需要回调的情况时,我需要增加使用temp。我无法更改增量以将参数传递给它,因为评分者测试脚本不允许它。第二个问题是它不会增加任何输入。例如,如果你只是在数字23上调用increment,它就会返回23.评分者的测试脚本看起来像这样:

public class TestBigNaturalSimple {

public static void main(String[] args) {
    BigNatural b1 = new BigNatural(); // default constructor
    BigNatural b2 = new BigNatural(23); // one-argument int constructor
    BigNatural b3 = new BigNatural("346"); // one-argument String constructor
    BigNatural b4 = new BigNatural(b2); // one-argument BigNatural
                                        // constructor

    b1.increment();
    b3.decrement();

    System.out.println(b1.toString()); // should print out 1
    System.out.println(b4.toString()); // should print out 23
}
}

我的代码是:

public class BigNatural {

private String num; 

public BigNatural(String input) {
    num = input;
}


public BigNatural(BigNatural input) {
    num = input.toString();
}

public BigNatural(Integer input) {
    num = input.toString();
}

public BigNatural() {
    Integer i = 0;
    num = i.toString();
}

public void increment() {
    Integer first = 0;
    Character ch = num.charAt(num.length()-1);
    Integer last = Character.digit(ch, 10);

    if (num.length() > 1)
    {
        if (last < 9) {
            last++;
        }
        else
            {
            if (num.length() >= 2)
            {
                last = 0;
                String temp = new String(num.substring(0, num.length()-2));
                increment();
            }
            else
            {
                last++;
            }
        }
    }
    else
    {
        if (last < 9)
        {
            last++;
        }
        else
        {
            last = 0;
            first = 1;
        }
    }

    String t = last.toString();


    if (first > 0)
    {
    String x = first.toString();
    num.concat(x);
    }

    num.concat(t);
}

public void decrement() {
    Character ch = num.charAt(num.length()-1);
    Integer last = Character.digit(ch, 10);

    if(num.length() > 1)
    {
        if(last == 0)
        {
            String temp = new String(num.substring(0, num.length()-2));
            decrement();
        }
        else
        {
        last--;
        }
    }
    else
    {
        if(last > 0)
        {
            last--;
        }
        else
        {
            last = 0;
        }
    }

    String t = last.toString();
    num.concat(t);
}


public String toString() {
    return num;
}
}

3 个答案:

答案 0 :(得分:3)

这必须是增加我见过的数字最复杂的方法。 ;)我认为你必须这样做。

从我所看到的,你不会在任何地方改变num。如果您使用调试器,我希望这是显而易见的。 ;)

如果您希望num更改,请尝试使用num = num.concat(t)

注意:字符串是不可变的,因此您无法更改它,您只能替换它。

编辑:这是一个为您自己的兴趣提供的版本。你的教授会知道你没有写这个,所以不要复制它。 ;)

public void increment() {
    num = increment(num);
}
private static String increment(String s) {
    if (s.length() <= 0) return "1";
    char ch = s.charAt(s.length() - 1);
    String top = s.substring(0, s.length() - 1);
    return ch < '9' ? top + ++ch : increment(top) + '0';
}

答案 1 :(得分:1)

字符串在Java中是不可变的。因此,代码

num.concat(t);
增量方法中的

将无法达到预期效果。

答案 2 :(得分:1)

首先,应用规则不要重复

  • 增加是添加1
  • 减少是添加-1

因此,您只需编写一个以数字作为输入并将其添加到BigNatural的函数:

public void increment() {
  add(1);
}

public void decrement() {
  add(-1);
}

private void add(int i) {
  // Your homework here ...
  // You will have only one function to debug and correct, not 2
}

第二:正如其他答案所指出的那样,num.concat(t);没有达到预期效果,您需要num = num.concat(t);。使用您不知道的功能时,请始终参考Java文档。如果您没有允许调试程序的编辑器,我强烈建议您使用一个:例如Eclipse,但其他编辑器可能更适合作为学习工具。额外的好处是工具将为您格式化代码,警告您有很多错误,......