2015-10-08 6 views
0

Выполнение java-проекта для класса CS, что влечет за собой создание dec в двоичном конвертере с 2 классами (один из которых является тестером). Учитель настаивает на том, что мы не обращаемся к нему за помощью. Не совсем уверен, что я могу сделать, потому что он говорит мне «ошибка: не может найти символ» и указывает на pn.charAt во второй половине кода. Любая помощь или подсказки будут высоко оценены.Ошибка Java: не удается найти символ

конвертер

public class BinaryNumber { 
    private String n; 

    public BinaryNumber(String pn) { 
    n = pn; 
    } 


    public String getN() { 
    return n; 
    } 



    public int convertToDecimal() { 

    int bitPosition = 0; 
    int sum = 0; 

    for (int i = n.length() - 1; i >= 0; i--) { 

     sum = sum + (int) Math.pow(2, bitPosition) * (pn.charAt + (i) - 48); 
     //System.out.println(n.charAt (i)); 

    } 
    return sum; 
    } 
    public int add(BinaryNumber obn) { 
    return convertToDecimal() + obn.convertToDecimal(); 
    } 
    public int sub(BinaryNumber obn) { 
    return convertToDecimal() - obn.convertToDecimal(); 
    } 

} 

испытаний Класс

public class BinaryNumberTest { 
    public static void main(String[] args) { 
    BinaryNumber bn = new BinaryNumber("1011"); 
    BinaryNumber bn1 = new BinaryNumber("1111"); 


    System.out.println(bn.convertToDecimal()); 
    System.out.println(bn.add(b1)); 
    } 

} 
+2

Сообщение об ошибке говорит вам ** ** именно то, что это не так: Там нет переменной 'pn' в классе, так что дон 't использовать переменные, которые не существуют, и параметр конструктора не учитывается, поскольку это видно только внутри конструктора. Может быть, вы хотите вместо этого использовать переменную 'n'? –

+0

Где переменная 'pn' в классе' BinaryNumber'? –

ответ

0

Ваш pn определяется как параметр в конструкторе BinaryNumber() поэтому он имеет «локальную область», она не существует вне этой функции.

Что вы должны использовать в convertToDecimal() вместо этого будет вашей глобальной переменной n.

И если pn или n являются строками, то использование вами charAt также неверно, так как оно является функцией. Если бы мне пришлось экстраполировать, я думаю, вы пытаетесь использовать i в качестве своего charAt() позиционирования?

изменения, чтобы исправить эти две ошибки будет выглядеть следующим образом:

sum = sum + (int) Math.pow(2, bitPosition) * (n.charAt(i) - 48); 
+2

Не уверен, что ваша реализация 'charAt' верна. Это метод, и приведенное выше должно приводить к ошибке компиляции. Взгляните на http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int) –

+0

@BalwinderSingh благодарит за это. Я был зафиксирован на переменном объеме 'pn' Я не заметил, что было передо мной. Теперь я пересмотрел свой ответ. Приветствия. – Coderchu

+0

По какой-то причине это исправление по-прежнему не работает. Он возвращает число, отличное от реального преобразования двоичного числа. Например, при первом построении «bn» он возвращается 3. – Jaskal