Ошибка компиляции: не удается найти символ - PullRequest
3 голосов
/ 19 апреля 2011

Я получаю сообщение об ошибке: не удается найти символ, когда код достигает рекурсивного вызова для увеличения, и я понятия не имею, почему? Вот код для приращения. Любая помощь будет принята с благодарностью.

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);
}

РЕДАКТИРОВАТЬ: Я действительно новичок в Java, так что чем более простой вы можете сделать свои ответы, тем лучше. Итак, я получаю ошибку: BigNatural.java.35: не может найти символ инкремент метода символа () расположение: класс java.lang.String temp.increment ()

И прояснение любых других вопросов - вот весь код.

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;
}

} публичный класс 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
            {
            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;
}

}

Ответы [ 2 ]

6 голосов
/ 19 апреля 2011

Строка не имеет метода с именем приращения.И, конечно, это не рекурсивный вызов, потому что вы находитесь внутри объекта (какой объект? В вашем коде нет определения класса), в то время как вы вызываете приращение для объекта String.

В дополнениеВаше временное поле никогда не используется.Если вы хотите разделить его между вызовами методов, вы можете попробовать что-то вроде этого:

public void increment (String temp){}

, а затем передать его при вызове:

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

Конечно, ваша функция не может работатькак это.Параметр temp должен управляться внутри вашего метода приращения.Пересмотрите свою логику.Это больше не вопрос синтаксиса.Если вы не можете изменить сигнатуру метода, тогда объявите temp как поле вашего класса BigNatural:

public class BigNatural {

private String num; 
private String temp
......

, а внутри метода приращения просто сделайте:

temp = new String(num.substring(0, num.length()-2));
0 голосов
/ 19 апреля 2011

Некоторые другие указатели:

String - неизменный класс, означающий, что после его создания он уже не может быть изменен. Итак, делаем

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

имеет смысл, так как вы создадите 2 объекта String здесь (last.toString() создаст и вернет новую строку).

Просто сделайте:

String t = last.toString();

или даже лучше:

num.concat(last.toString());

То же самое касается temp String, просто сделайте:

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

Далее, учтите непреднамеренный автобокс:

Integer first = 0;
first++;

это будет создавать новый объект Integer каждый раз, когда выполняется first++; Целое число (как строка) является неизменным. При расчете просто используйте примитив int вместо Integer.

Наконец, будьте осторожны, чтобы не создавать бесконечный цикл. Если я понимаю, ваш код будет объединен с num, поэтому num.length() > 1 будет истинно всегда, если оно было истинно в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...