Avatar billede tommy_robredo Nybegynder
20. november 2009 - 19:27 Der er 13 kommentarer

nybegynder i opgave i java

Hej... Jeg håber at kunne få lidt hjælp af jer eksperter i java da jeg er stallet i en opgave min lærer har stillet mig.

Opgaven lyder på at jeg skal importere nogle data fra en xml fil over i et program min lærer delvist har skrevet og så få plottet disse data i en graf. Jeg kan godt køre programmet og få data ud, men de kommer ikke ud som et plot af en graf!
Kildekoden lyder således (det skal lige siges at fra kommentaren //tegn graf, har jeg selv en del af koden !.

Der kommer desuden et vindue op når man kører programmet hvor man skal indtaste sti navnet på filen.


package miniprojekt2;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;

// Klasse der åbner og læser regneakr data fra en Excel 2004 XML fil
class XML {

  private final int COLS = 2;
  private String filnavn = null;
  private boolean aaben = false;
  private BufferedReader in = null;

  // Konstruktør - tager et filnavn som parameter
  XML(String filnavn) {
      this.filnavn = filnavn;
      try {
        in = new BufferedReader(new FileReader(filnavn));
        aaben = in != null;
      } catch (Exception e) {
        aaben = false;
      }
  }

  // Henter et data par fra en åben fil
  public double[] hentData() {
      if ( aaben ) {
        try {
            // Spring indledende linier over
            String l = in.readLine().trim();
            while ( ! l.startsWith("<Row>") ) {
              l = in.readLine().trim();
            }
            // gå til første felt
            l = in.readLine().trim();
            double[] res = new double[COLS];
            int i = 0;
            // læs feltindhold
            while ( l.startsWith("<Cell>") ) {
              l = l.replaceAll("</Data.*>","");  // Fjerner afsluttende tags
              l = l.replaceAll("<.*>","");      // Fjerner tags før data
              if ( i < COLS ) {
                  res[i] = Double.parseDouble(l);
                  i++;
              }
              l = in.readLine().trim();
            }
            return res;
        } catch (Exception e) {}
      }
      return null;
  }

}

// Klasse der udskriver data fra fil som graf
class Graf {

  private final boolean TEST = true;

  Graf(String titel, XML data) {
      double[] res = null;
      ArrayList<double[]> list = new ArrayList<double[]>();
      int maxx = 10;
      int maxy = 110;
      int minx = -10;
      int miny = -1;
      // Indlæs data og find maks og min værdier
      do {
        res = data.hentData();
        if ( res != null ) {
            if ( list.size() == 0 ) {
              minx = (int)(res[0]-1.0);
              maxx = (int)(res[0]+1.0);
              miny = (int)(res[1]-1.0);
              maxy = (int)(res[1]+1.0);
            } else {
              if ( minx > res[0] ) minx = (int)(res[0]-1.0);
              else if ( maxx < res[0] ) maxx = (int)(res[0]+1.0);
              if ( miny > res[1] ) miny = (int)(res[1]-1.0);
              else if ( maxy < res[1] ) maxy = (int)(res[1]+1.0);
            }
            list.add(res);
        }
      } while ( res != null );
      // Testudskrift: viser datapar
      if ( TEST ) {
        for (double[] e : list) {
            for (int i=0; i<e.length; i++) {
              System.out.print("\t"+e[i]);
            }
            System.out.println();
        }
      }
      // Tegn graf
      class Koordinatsystem extends JPanel {

    private int [][] data;
    private final int MAXX = 110;
    private final int MINX = -1;
    private final int MAXY = 10;
    private final int MINY = -10;
    private final int STEP = 5;

    public Koordinatsystem(int [][] data) {
        this.data = data;
    }

    public void paintCompnent(Graphics g) {

        super.paintComponent(g);

        double h = getHeight();
        double w = getWidth();
        double deltaX = w / (double) (MAXX - MINY);
        double deltaY = h / (double) (MAXY - MINY);
        double origoX = -(double) (MINX*deltaX);
        double origoY = h +(double) (MINY*deltaY);

        g.setColor(Color.RED);
        g.drawLine((int)origoX,0,(int)origoX,(int)h-1);
        g.drawLine (0,(int)origoY,(int)w-1,(int)origoY);
        for (int i=(MINX/STEP)*STEP; i<=MAXX; i+=STEP){
            g.drawLine(
                    (int) ((double)i*deltaX+origoX),(int)(origoY-5),
                    (int)  ((double)i*deltaX+origoX),(int)(origoY+5));

        }
        for (int i=(MINY/STEP)*STEP; i<=MAXY; i+=STEP) {
            g.drawLine(
                    (int) (origoX-5), (int)(origoY-((double)i*deltaY)),
                    (int) (origoX+5), (int)(origoY-((double)i*deltaY)));
        }

        g.setColor(Color.BLUE);
        for (int i=1; i<data.length; i++) {
            g.drawLine((int) ((double)data [i-1] [0]*deltaX+origoX),
                        (int) (origoY-((double)data[i-1][i]*deltaY)),
                        (int) ((double)data[i][0]*deltaX+origoX),
                        (int) (origoY-((double)data[i][1]*deltaY)));

        }
    }
}

          }
      }


// Klasse med brugergrænsefalde
class Bruger extends JPanel {

  private JButton        doitknap;
  private JLabel        prompt;
  private JTextField    inddatafelt;

  // Konstruktør - klargør interaktivt vindue
  Bruger() {
      prompt = new JLabel();
      inddatafelt = new JTextField();
      doitknap = new JButton();

      setLayout(null);

      prompt.setText("Indtast filnavn:");
      add(prompt);
      prompt.setBounds(30, 20, 100, 30);

      inddatafelt.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            inddata(evt);
        }
      });
      add(inddatafelt);
      inddatafelt.setBounds(130, 20, 240, 28);

      doitknap.setText("Tegn graf");
      doitknap.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            doit(evt);
        }
      });
      add(doitknap);
      doitknap.setBounds(160, 60, 97, 29);
  }

  // metode der kaldes når der trykkes på retur tast
  private void inddata(java.awt.event.ActionEvent evt) {
  }

  // metode der kaldes når knap klikkes
  private void doit(java.awt.event.ActionEvent evt) {
      // hent filnavn
      String filnavn = inddatafelt.getText();
      // udfør visning af graf
      if ( filnavn != null ) {
        Graf graf = new Graf("Graf",new XML(filnavn));
      }
  }

}

// Programklasse
public class Miniprojekt {

  public static void main(String[] args) {
      // åben dialog der beder om inddatafil, etc.
      JFrame f = new JFrame("Graf");
      f.add(new Bruger());
      // Program afsluttes når vinduet lukkes
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setSize(400,140);
      f.setVisible(true);
 

  }
}
Avatar billede Slettet bruger
20. november 2009 - 20:51 #1
Hele pointen er vel, at du selv skal skrive en funktion/et objekt til at plotte dem ind på en graf.
Ellers lærer du jo ikke noget, og det er vel derfor du går på en uddannelse, ikke?

Jeg er sikker på at folk vil hjælpe dig med specifikke problemer (programmerer ikke selv Java), men de vil næppe lave hele opgaven for dig.
Avatar billede tommy_robredo Nybegynder
20. november 2009 - 21:01 #2
Jeg ber dem jo ikke om at lave opgaven!!! har selv skrevet en del af programmet! jeg spørger bare om hvordan man får data til et koordinatsystem plot.

Hvorfor får jeg i øvrigt en sikkerhedsadvarsel fra min browser når jeg prøver at gå ind på din hjemmeside? er du hacker?
Avatar billede Slettet bruger
20. november 2009 - 23:35 #3
Det må du undskylde. Hvad jeg (mis)læste fra til spørgsmål var, at din lærer havde skrevet koden, og at du ville have den udvidet med plotningen til et kordinatsystem. Jeg har så tydeligt misforstået dig. Det undskylder jeg.

Det er skægt hvor mange mennesker der beklager sig over det. Folk kigger faktisk på de links.
Nej, jeg er ikke hacker. Til gengæld er der en cracker (læg mærke til ordvalget) der har brudt ind på min webserver, og har placeret en virus på min side.
Virussen er fjernet igen, men inden den blev det nåede Google at opdage den, og de er ikke så hurtige til at finde ud af, at siden ikke længere er farlig. Desuden deler de deres informationer med bl.a. Mozilla, hvorfor også brugere af Firefox får advarslen.
Avatar billede arne_v Ekspert
21. november 2009 - 04:12 #4
Hvis jeg skulle gætte på hvorfor der ikke tegnes noget, så vil jeg tro at det skyldet at du erklærer en klasse Koordinatsystem, men så vidt jeg kan konstruerer du aldrig en instans af klassen.
Avatar billede arne_v Ekspert
21. november 2009 - 04:13 #5
PS: Jeg synes iøvrigt ikke at den XML parser er god.
Avatar billede tommy_robredo Nybegynder
21. november 2009 - 10:56 #6
Hvordan vil du så konstruerer instansen ?, og hvad er der galt med XML parser ?
Avatar billede arne_v Ekspert
21. november 2009 - 17:48 #7
Et eller ander sted skal der vel laves en:

new Koordinatsystem(data)

og resultatet skal så added til hvor det skal vises.
Avatar billede arne_v Ekspert
21. november 2009 - 17:48 #8
Java har indbygget XML parser så man ikke behøver at læse linier og teste på tags.
Avatar billede tommy_robredo Nybegynder
21. november 2009 - 17:53 #9
hvorfor kan jeg ikke læse indlæg # 7 og 8?
Avatar billede arne_v Ekspert
21. november 2009 - 17:57 #10
Eksperten har vist et lille cache problem for tiden, men de dukker op !!
Avatar billede arne_v Ekspert
14. december 2009 - 03:09 #11
Kommet videre ?
Avatar billede tommy_robredo Nybegynder
22. november 2010 - 10:46 #12
lukker

tak for de gode svar
Avatar billede arne_v Ekspert
22. november 2010 - 23:57 #13
Der er ikke lukket førend du har tildelt point til den som du synes fortjener point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester