JAVA畫點程式

我想寫一個程式 ~ 可以載入 txt檔案, txt檔案內容如下, 請問我的程式該如何寫下去? 才可以將輸入的點,輸出成圖形?

579 2

4.489013,3.949385

,3.234519, 3.032182

,2.339381, 3.233512

,3.067888, 3.272515

,3.337977, 3.214286

,1.623692, 1.968673

,4.459075, 3.803079

import java.io.*;

public class dr{

public static void main(String[] args)throws IOException{

String str;

int num=0;

double x[] = new double [1000];

double y[] = new double [1000];

FileReader fr = new FileReader("d:\\579.txt"); BufferedReader bfr=new BufferedReader(fr);

已更新項目:

是要 畫點!!

579是座標的總數

2是維度

2 個已更新項目:

不好意思 我執行後 會出現下面這些 ~ 不知道該怎麼解決?

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -2

at java.lang.String.substring(String.java:1937)

at Draw.readPointData(Draw.java:29)

at Draw. (Draw.java:13)

at Draw.main(Draw.java:10)

3 個已更新項目:

Exception in thread "main" java.lang.NumberFormatException:

For input string: "4.489013 3.9493853.234519 3.0321822.339381

執行後會顯示載入的資料 ~ 但是並不會畫成圖形耶?

是我少了什麼程式嗎? 還是怎麼了嗎~?

2 個解答

評分
  • Cola
    Lv 5
    9 年前
    最佳解答

    版大是要畫點or線,連續線?

    579 2 是代表什麼?總點數 2點?

    2011-08-05 18:37:44 補充:

    import java.io.*;

    import java.awt.*;

    import java.awt.geom.*;

    import javax.swing.*;

    public class Draw extends JFrame{

    float x[];

    float y[];

    boolean readOk;

    public static void main(String[] args){

    new Draw();

    }

    public Draw(){

    readOk = readPointData("d:\\579.txt");

    setSize(500, 500);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setVisible(true);

    }

    public boolean readPointData(String f){

    try{

    BufferedReader bfr=new BufferedReader(new FileReader(f));

    String s;

    s = bfr.readLine();

    int num = Integer.parseInt(s.split(" ")[0]);

    x = new float [num];

    y = new float [num];

    int i=0,n;

    while((s = bfr.readLine())!=null){

    n = s.lastIndexOf(',');

    x[i] = Float.parseFloat(s.substring(1,n));

    y[i] = Float.parseFloat(s.substring(n+1));

    i++;

    }

    bfr.close();

    return true;

    }catch(IOException e){return false;}

    }

    public void paint(Graphics g){

    Graphics2D g2d = (Graphics2D)g;

    g2d.clearRect(0, 0, getWidth(), getHeight());

    if (!readOk) return;

    Insets inset = getInsets();//取得Frame Border

    g2d.translate(inset.left, inset.top);//變更原點

    g2d.setPaint(Color.red);

    float d = 1.0f;//圓直徑

    for(int i=0;i<x.length;i++){

    //用Ellipse2D畫圓點

    g2d.fill(new Ellipse2D.Float(x[i]-d/2.0f, y[i]-d/2.0f, d, d));

    }

    }

    }

    2011-08-06 00:44:17 補充:

    版大你的資料可能包含有空白行~請刪除再試試

    另外跟版大確認一下

    txt檔下面第1,2行前面是否有空格?

    因為複製到記事本格式就是這樣

    若沒有請補上再執行看看~第2行一定要有,第1行沒關係

    要不然讀取的資料會有誤

    要不然這部份改成這樣

    ....

    if (n>0){

    x[i] = Float.parseFloat(s.substring(1,n));

    y[i] = Float.parseFloat(s.substring(n+1));

    i++;

    }

    ....

    2011-08-06 12:00:15 補充:

    readPointData這個方法重寫好了,改成下面

    這樣你的點資料有多少筆就讀多少筆,有空白行也沒關係

    若依第一行總點數資料,若不對可能會有問題

    2011-08-06 12:02:27 補充:

    readPointData方法,改成下面

    public boolean readPointData(String f){

    try{

    BufferedReader bfr=new BufferedReader(new FileReader(f));

    StringBuffer str = new StringBuffer();

    String s;

    bfr.readLine();

    2011-08-06 12:02:57 補充:

    while((s = bfr.readLine())!=null){

    str.append(s);

    }

    String ss[] = str.toString().trim().split(",");

    int num = ss.length;

    x = new float [num];

    y = new float [num];

    2011-08-06 12:03:13 補充:

    for(int i=0;i

    2011-08-06 12:05:27 補充:

    for(int i=0;i<num;i+=2){

    x[i] = Float.parseFloat(ss[i]);

    y[i] = Float.parseFloat(ss[i+1]);

    }

    bfr.close();

    return true;

    }catch(IOException e){return false;}

    }

    [<]請改半形

    2011-08-07 00:34:36 補充:

    版大請檢查你的點資料是否有缺少<,>

    579 2

    4.489013,3.949385

    ,3.234519, 3.032182 //這行開始,每行的點格式一定要這樣

    若還是不行,能否請版大把資料放到免空,讓我測試

    2011-08-07 15:20:11 補充:

    http://www.mediafire.com/?y4yisgkxvqtpe1j

    我把原始檔給你好了,資料是用你po的部份點資料

    版大你先執行看看

  • 9 年前

    能否將你的信箱留給我 ~ 我寄檔案給你?

    2011-08-07 17:29:29 補充:

    對了 ~ 這樣做標點顯得好小 ~ 要怎麼可以把它改大點一點?

    有辦法讓他平均散在 開啟的視窗上面嗎?

還有問題?馬上發問,尋求解答。