2014-04-23 4 views
0

У меня возник вопрос о том, как печатать длинное значение с помощью метода toString.Печать Длинные значения с toString в Java

Мой код:

public class LinkedLargeInteger { 

    private class Node { 

    private int data; 
    private long dat; 
    private Node next; 

    private Node(int data, Node next) { 
     this.data = data; 
     this.next = next; 
    } 

    private Node(int data) { 
     this(data, null); 
    } 

    private Node() { 
     data = 0; 
     next = null; 
    } 

    private Node(long dat, Node next) { 
     this.dat = dat; 
     this.next = next; 
    } 

    private Node(long dat) { 
     this(dat, null); 
    } 

} 

private Node head; 
private Node tail; 
private int size; 
private String largeString; 
private int largeInt; 
private long largeLong; 

public LinkedLargeInteger(long largeLong) { 
    String s = Long.toString(largeLong); 
    head = new Node(); 
    tail = head; 
    size = 0; 
    for (int i = 0; i < s.length(); i++) { 
     tail.next = new Node(Long.parseLong(s), null); 
     tail = tail.next; 
     size++; 
    } 
} 

@Override 
public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    Node current = head.next; 
    for (int i = 0; i < this.size; i++) { 
     builder.append(i + 1); 
     current = current.next; 
    } 
    return builder.toString(); 
} 

public static void main(String[] args) { 
    LinkedLargeInteger numLong = new LinkedLargeInteger(100000000000L); 
    System.out.println(numLong); 
} 
} 

Я реализовал связанный список с моим классом Node и хочу напечатать длинное значение с моим конструктором. Когда я печатаю длинное значение в основном, это дает мне совсем другое число, чем то, что я ввел в качестве аргумента. Кто-нибудь знает, в чем моя проблема?

+2

В настоящее время ваш 'метод toString' вернет все числа от 1 до размера-1 (т.е.' 123 .. .size-1 '). Если вы хотите добавить содержимое узлов, используйте 'builder.append (current.data);' –

+0

, потому что у него есть toString? – njzk2

+0

все ваши узлы имеют одинаковое значение. – njzk2

ответ

1

Попытка исправить конструктор:

public LinkedLargeInteger(long largeLong) { 
    String s = Long.toString(largeLong); 
    head = new Node(); 
    tail = head; 
    size = 0; 
    for (int i = 0; i < s.length(); i++) { 
    // You were putting the whole number, not the digits 
     tail.next = new Node(Long.parseLong(String.valueOf(s.charAt(i))), null); // <<== 
     tail = tail.next; 
     size++; 
    } 
} 

И в ToString:

public String toString() { 
StringBuilder builder = new StringBuilder(); 
    Node current = head.next; 
    for (int i = 0; i < this.size; i++) { 
     builder.append(current.dat); // <<== 
     current = current.next; 
    } 
    return builder.toString(); 
} 
Смежные вопросы