首先我的回复增加我知道是不正确的。我不知道该怎么做。当我遇到需要回调的情况时,我需要增加使用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;
}
}
答案 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)
首先,应用规则不要重复:
因此,您只需编写一个以数字作为输入并将其添加到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,但其他编辑器可能更适合作为学习工具。额外的好处是工具将为您格式化代码,警告您有很多错误,......