2016-03-26 17 views
0

Bağımlı liste düğümündeki verileri (değişken katsayısı ve derecesi) yazdırmaya çalışıyorum.Bağlantılı listenin node hatası için giriş dosyasını oku

Ancak input.txt dosyasındaki bir satırı okuduğumda bazı yanlış bilgiler var. girdi.txt dosyasının içeriği

2 
2 0 
3 0 
2 
-2 0 
3 4 

altındadır Ama Kodum java.lang.NumberFormatException gibi bir hata mesajı yazdırmak, bu okumayı başarısız: Giriş dizesi için: "01"


peşin
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 

public class Assignment21 { 
    public static void main(String[] args) { 
    try { 
     LinkedList polynomialN = new LinkedList(); 
     LinkedList polynomialM = new LinkedList(); 

     BufferedReader in = new BufferedReader(new FileReader("input.txt")); 
     String firstEntryNum; 
     firstEntryNum = in.readLine(); 
     int entryNum = Integer.valueOf(firstEntryNum); 

     for(int i = 0; i < entryNum; i++){ 
      String temp = in.readLine(); 

      int divider = temp.indexOf(" "); 
      int coefficient = Integer.parseInt(temp.substring(0, divider)); 
      int degree = Integer.parseInt(temp.substring(divider) + 1); //지수 입력받기 

      polynomialN.add(new Node(coefficient, degree)); 
     } 

     String secondEntryNum; 
     secondEntryNum = in.readLine(); 
     entryNum = Integer.valueOf(secondEntryNum); 

     for(int i = 0; i < entryNum; i++){ 
      String temp = in.readLine(); 

      int divider = temp.indexOf(" "); 
      int coefficient = Integer.parseInt(temp.substring(0, divider)); //계수 입력받기 
      int degree = Integer.parseInt(temp.substring(divider) + 1); //지수 입력받기 

      polynomialM.add(new Node(coefficient, degree)); 
     } 

     polynomialN.print(); 
     polynomialM.print(); 

     in.close(); 

     BufferedWriter out = new BufferedWriter(new FileWriter("output.txt")); 
     out.close(); 
    } catch (Exception e) { 
     System.err.println(e); 
     System.exit(1); 
     // TODO: handle exception 
    } 
} 
} 

class Node{ 
int coefficient; 
int degree; 
Node nextNode; 

public Node(int coefficient, int degree) { 
    this.coefficient = coefficient; 
    this.degree = degree; 
} 
} 

class LinkedList { 
private Node head; 

public void add(Node newNode){ 
    if (head == null) 
     head = newNode; 
    else { 
     Node tail = head; 
     while(tail.nextNode != null){ 
      tail = tail.nextNode; 
     } 
     tail.nextNode = newNode; 
    } 
} 

public void print() { 
    StringBuffer sb = new StringBuffer(); 
    Node current = head; 
    int size = 0; 

    while (current != null){ 
     sb.append(current.coefficient); 
     sb.append(" "); 
     sb.append(current.degree); 
     current = current.nextNode; 
     size++; 
    } 

    System.out.println("[" + sb + "]"); 
    System.out.println("size: " + size); 
} 
} 

Teşekkür

cevap

2

java.lang.NumberFormatException: temelde bir int ayrıştırmak için çalışıyoruz giriş gerçekten bir in olmadığı anlamına gelir t. Ayrıca daha basit olan ve daha az kod gerektiren girişi okumak için Tarayıcı API'sini kullanıyorum.

Scanner sc = new Scanner(System.in); 
int firstLine = Integer.parseInt(sc.nextLine()); 

Eğer

Şimdi
String firstLine = sc.nextLine(); 

kullanarak girdileri alma tutmak kullanabileceği bir dize istedi yerine ise, içine bir ip hattı ayrıştırma ediyoruz bölümünde Ayrıca

while(sc.hasNextLine()){ 
    String something = sc.nextLine(); 
} 

ints bölücü, katsayı ve dipnot kullanarak derece, çok daha kolay yapılabilir.

Şimdi
String[] arr = something.split(" "); 

Eğer

int divider = Integer.parseInt(arr[0]) 
int coefficient = Integer.parseInt(arr[1]) 
int degree = Integer.parseInt(arr[2]) 
+0

Dosyadan veri okurken Tarayıcı API'sini kullanabilir miyim? Nasıl olabilir? –

+0

Evet, stdin yerine giriş yolu dosya yolu olacak. – Zeus

0

@Zeus = Integer.parseInt (dizi [1]) int derecesi = Integer.parseInt (dizi [

int divider = Integer.parseInt(arr[0]) 

int katsayısını cevap kullanabilirsiniz 2])

Veya tarayıcı ile okumaya devam edin

İlgili konular