2017-01-27 2 views
0

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

public class IntNode { 
private int value; 
private IntNode next; 
public IntNode(int val, IntNode n) 
{ 
    value = val; 
    next = n; 
} 
public void setValue(int val){ value = val; } 
public void setNext(IntNode n){ next = n; } 
public int getValue() { return value; } 
public IntNode getNext() { return next; } 
} 

и другой класс, который я назвал его BigNumber, который должен представлять собой любое положительное число (большой или маленький). Класс выглядит следующим образом:

public class BigNumber { 

private IntNode list; 
    //copy constructor. 
public BigNumber(BigNumber other){ 
    list = null; 
    for(IntNode p=other.list; p!=null; p=p.getNext()) 
     list = new IntNode(p.getValue(), list); 
} 

    //Constructor that takes string of a number and puts every digit in the linked list. if the string contains any char that is not digit, the linked list should be: 0->null. 
public BigNumber(String num){ 
    list = null; 
    if(stringIsNum(num)){ 
     for(int i=0; i<num.length(); i++){ 
      list = new IntNode((int)num.charAt(i),list); 
     } 
    } 
    else{ 
     list = new IntNode(0, list); 
    } 
} 

private boolean stringIsNum(String num){ 
    for(int i=0; i<num.length(); i++){ 
     if(!(num.charAt(i)>='0' && num.charAt(i)<='9')) 
      return false; 
    } 
    return true; 
} 

public String toString(){ 
    String s = ""; 
    for(IntNode p=list; p!=null; p=p.getNext()) 
     s+=p.getValue()+""; 
    return s; 
} 
} 

Проблема в этом классе является то, что, когда я хочу, чтобы напечатать, позволяет сказать, что строка «123», он печатает что-то вроде 515049 вместо фактического числа, которое является 321, (это должен напечатать номер назад). В чем проблема?

+3

Это означает, что пришло время научиться использовать отладчик, так как это должно помочь вам найти ответ самостоятельно и 2) дать вам представление о том, как использовать мощный инструмент. –

ответ

1

Вы бросаете символ в int. Это дает кодовую точку символа, а не значение, которое вы хотите. например: (целое) '1' = 49

Вместо (int)num.charAt(i) использование Integer.parseInt(num.charAt(i))

1

Вы являются получение 321. 51, 50 и 49 являются значения полукокса для 3, 2 и 1. Ваш код сохраняет значения char, а не фактические значения. Другими словами, вы близки, и вам просто нужно сохранить правильные значения.

Смежные вопросы