2016-09-09 14 views
5

Tôi hiện đang có một file văn bản như sau:Đọc một tập tin văn bản và chuyển đổi chúng thành đa thức

3 5 6 9 
3 4 6 7 2 
3 5 7 2 5 3 

Các tập tin khi đọc vào java sẽ được hiển thị như 3x^5 + 6x^9. Dòng thứ hai sẽ được đọc là 4x^4 + 6x^7 + 2. Không thể hiển thị chương trình của tôi vì tôi không biết cách chuyển đổi các số này thành dạng đó. Tôi hiện chỉ nhận được những con số có khoảng cách giữa chúng khi tôi chạy chương trình.

Dưới đây là những gì tôi đã cố gắng:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class Driver { 

public static void main(String[] args) { 
    try { 
     @SuppressWarnings("resource") 
     Scanner myfile = new Scanner(new File("poly.dat")); 

     Polynomial[] mypolynomial; 

     mypolynomial = new Polynomial[10]; 

     int index = 0; 
     if (myfile.hasNext() == true) { //ignore this part 
      myfile.nextLine(); 
     } else { 
      System.out.println("Error: File is empty"); 
      return; 
     } 
     while (myfile.hasNextLine()) { 
      mypolynomial[index] = new Polynomial(myfile.nextLine()); 
      index++; 
     } 
     String menu = "Please choose a Polynomial \n"; 
     for (int i = 0; i < index; i++) { 
      menu = menu + i + " " + mypolynomial[i].getNumber() + "\n"; 
     } 
     String choicemenu = "What do you want to do ? \n " + "A - Display a Polynomial \n " 
       + "B - Add two Polynomial \n " + "C - Subtract two Polynoimal \n " 
       + "D - Multiply two Polynomial \n "; 
     String action = JOptionPane.showInputDialog(choicemenu); 
     if (action.equals("A")) { 
      int choice = Integer.parseInt(JOptionPane.showInputDialog(menu)); 
      JOptionPane.showMessageDialog(null, mypolynomial[choice]); 
     } 
    } catch (FileNotFoundException e) { 
     System.out.println(" OOOPS - something wrong - maybe the file name is wrong"); 
    } 
} 
} 

public class Polynomial { //Testing the program 

String poly; 

public Polynomial(String p) 
{ 
    poly = p; 
} 

public String getNumber() { 
     return poly; 
} 

public void setNumber(String p) 
{ 
    poly=p; 
} 

public String toString() 
{ 
    String result = "The Polynomial is " + poly; 
    return result; 
} 


} 

Tôi muốn đầu tiên hiển thị các chữ số như đa thức, sau đó tôi cuối cùng muốn thực hiện hoạt động với họ. Ai giúp tôi với?

Trả lời

1

Dường như đa thức có các giá trị đi kèm theo các cặp, tức là 5 4 trở thành 5x^4. Điều này có nghĩa là bạn phải theo dõi xem đó là lần đầu tiên của một cặp, thứ hai của một cặp, hoặc không phải là một thành viên của một cặp. Trường hợp đầu tiên bạn chỉ cần in giá trị, nhưng thứ hai bạn cần có giá trị "x ^" +.

Bạn có thể làm như sau trong constructor lớp đa thức của bạn:

  1. Tạo String polynomial = "".

  2. Lặp qua đường kẻ được truyền trong khi vẫn theo dõi boolean isOnSecond.

  3. Nếu !isOnSecond, nối thêm giá trị đọc và đặt isOnSecond thành true.

  4. Khác isOnSecond == true nối thêm "x^" + value và đặt isOnSecond thành sai.

  5. Kiểm tra xem chuỗi có giá trị khác không và nếu chuỗi đó có nối thêm dấu "+" và giữ vòng lặp hay không, không làm gì khác kể từ khi dòng kết thúc.

Điều này sẽ cung cấp cho bạn chuỗi trông giống như kết quả bạn cần. đang


Ví dụ trong constructor Polynomial của bạn:

public Polynomial(String p) { 
    // First step is to create a scanner of the String 
    // passed into the constructor. 
    Scanner scanner = new Scanner(p); 

    // Next step is to initialize the String poly 
    // to an empty String so we can append to it. 
    poly = ""; 

    // Next we need to include a way of keeping track of 
    // whether the value we just read was a first or second 
    // member of a pair. We can do that with a boolean 
    // initialized to false since the first use will be 
    // when it is on the first of a pair. 
    boolean isOnSecond = false; 

    // Now we need to start looping through the values in 
    // p which are separated by white space. Scanner has 
    // a method for that, scanner.next(). 
    while(scanner.hasNext()) { 
     String currentValue = scanner.next(); 

     // Now is where the boolean comes into play. 
     if(isOnSecond) { // second of a pair 
      // the second of a pair needs to have "x^" before its value 
      poly = poly + "x^" + currentValue; 

      // Here we need to check if there is another value coming after 
      // and if there is append a " + " to poly 
      if(scanner.hasNext() { 
       poly = poly + " + "; 
      } 
     } 
     else { // !isOnSecond, so is first of a pair 
      // Only need to append the currentValue here 
      poly = poly + currentValue; 
     } 
     isOnSecond = !isOnSecond; // toggles isOnSecond 
    } 
} 
+0

Cảm ơn bạn đã trả lời của bạn! Có thể bạn có khả năng mở rộng về điều này? Bạn có ý nghĩa gì khi tạo một đa thức String? Tức là khi im đọc dữ liệu vào một mảng? Tôi không quen với boolean isOnSecond là tốt. Bạn có thể đưa ra một ví dụ và giúp tôi khởi động nó không? Tôi xin lỗi, tôi vẫn đang cố nắm bắt những gì đang diễn ra. Cảm ơn bạn mặc dù –

+0

Tôi đã thêm một số mã mẫu để bạn có thể xem. –

+1

Nếu bạn có thể đảm bảo bố cục của tệp, bạn cũng có thể lưu trữ tệp dưới dạng tệp nhị phân và chỉ lặp qua các byte để truy cập nhanh hơn. – Krythic

Các vấn đề liên quan