Erro de compilation: não é possível encontrar o símbolo

Eu estou recebendo o erro não pode encontrar o símbolo quando o código atinge a chamada recursiva para incremento e não tenho idéia por quê? Aqui está o código para incremento. Qualquer ajuda será muito apreciada.

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 = 0; if (num.length() >= 2) { String temp = new String(num.substring(0, num.length()-2)); temp.increment(); } else { last++; } } } else { if (last == 9) { last = 0; first = 1; } else { last++; } } String t = new String(); String x = new String(); t = last.toString(); x = first.toString(); if (first > 0) { num.concat(x); } num.concat(t); } 

EDIT: Eu sou muito novo para o java para o mais básico você pode fazer suas respostas, melhor. Ok, então o erro que estou recebendo é: BigNatural.java.35: não é possível encontrar o método de símbolo de símbolo increment () location: class java.lang.String temp.increment ()

E para esclarecer quaisquer outras questões aqui é o código inteiro.

 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 = 0; if (num.length() >= 2) { String temp = new String(num.substring(0, num.length()-2)); temp.increment(); } else { last++; } } } else { if (last == 9) { last = 0; first = 1; } else { last++; } } String t = new String(); String x = new String(); t = last.toString(); x = first.toString(); if (first > 0) { 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)); temp.decrement(); } else { last--; } } else { if(last > 0) { last--; } else { last = 0; } } String t = new String(); t = last.toString(); num.concat(t); } public String toString() { return num; } 

} 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 = 2) { String temp = new String(num.substring(0, num.length()-2)); temp.increment(); } } else { last++; } } else { if (last == 9) { last = 0; first = 1; } else { last++; } } String t = new String(); String x = new String(); t = last.toString(); x = first.toString(); if (first > 0) { 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)); temp.decrement(); } else { last--; } } else { if(last > 0) { last--; } else { last = 0; } } String t = new String(); t = last.toString(); num.concat(t); } public String toString() { return num; } 

}

String não possui um método chamado incremento. E é claro que não é uma chamada recursiva porque você está dentro de um object (qual object? No seu código não existe uma definição de class), enquanto isso você está invocando o incremento em um object String.

Além disso, seu campo temporário nunca é usado. Se você quiser compartilhá-lo entre as chamadas de método, você pode tentar algo assim:

 public void increment (String temp){} 

e depois passá-lo enquanto chama:

 String temp = new String(num.substring(0, num.length()-2)); increment(temp); 

Claro que sua function não pode funcionar assim. O parâmetro temp deve ser gerenciado dentro do seu método de incremento. Revise sua lógica. Não é mais uma questão de syntax. Se você não puder alterar a assinatura do método, declare temp como um campo da sua class BigNatural:

 public class BigNatural { private String num; private String temp ...... 

e o método de incremento interno simplesmente faz:

 temp = new String(num.substring(0, num.length()-2)); 

Alguns outros pointers:

String é uma class imutável que significa que, uma vez criada, não poderá mais ser alterada. Então, fazendo

 String t = new String(); t = last.toString(); 

agora faz sentido, já que você criará 2 String Objects aqui ( last.toString() criará e retornará uma nova String).

Simplesmente faça:

 String t = last.toString(); 

ou melhor ainda:

 num.concat(last.toString()); 

O mesmo vale para o String temporário, simplesmente faça:

 String temp = num.substring(0, num.length()-2); 

Em seguida, esteja ciente de autoboxing não intencional:

 Integer first = 0; first++; 

isso criará um novo Objeto Inteiro toda vez que first++ for executado; Inteiro (como String) é imutável. Ao calcular simplesmente use o int primitivo em vez de Integer .

Finalmente, tenha cuidado para não criar um loop infinito. Se eu entendi o seu código num será concatenado a so num.length() > 1 será verdadeiro sempre se fosse verdade na primeira vez.