Cześć,
Napisałem program który wczytuje dane z pliku, następnie wykonuje działania na poszczególnych "rekordach" i powinien rysować.
Mam jednak pewne zastrzeżenia:
- Podczas kompilacji program momentami staje w miejscu tak jakby się zawieszał (nic nie zmienia się na konsoli - specjalnie wrzuciłem system.out.println aby sprawdzić jaki jest wynik oraz czy wszystko idzie dalej), po kilku minutach pętla powraca do działania ale nie wiem co ona tak na prawdę robi, czy się resetuje czy co? Rozumiem, przechodzi ona przez 168 tys linijek x 3 liczby w każdej ale czy tak powinno być? Mój komputer nie ma problemu z utrzymaniem eclipse'a.
- Chciałbym aby zmienne "x" oraz "z" były zapisywane jako double ponieważ ucina to wyniki działania w mojej pętli for a to jest kluczowe, jeśli to zrobię to nie będę mógł skorzystać z metody
drawOval
. Czy jest jakaś metoda w awt która jednocześnie skorzysta z double'a i wykorzysta moje dwie zmienne? - Czy te działania są potrzebne? Czy może trzeba w ogóle zamieniać tego na radiany? Trzecia kolumna to mikrony, druga w mikronach a pierwsza w mikro radianach. Czy dobrze zamieniam je aby później wykorzystać we współrzędnych?
- Czy ten kod jest poprawny i wystarczy zaczekać te kilkadziesiąt minut na całą pętlę i powinien narysować? Czy ify zagnieżdżone w forze działają poprawnie? Inaczej pętla wychodzi poza ArrayListe. Trochę mnie to dziwi bo ludzie nie korzystają tylko z plików zawierających po 50 linijek, tak mi się wydaje. Podczas kompilacji we Frame'ie coś się zmienia ale czy to celowy zabieg czy też jakiś bug Eclipse - tego nie wiem. Często można zauważyć dwa prostokąty które po pewnym czasie znikają i znowu wracają.
Oto mój kod:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.File;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Rysowanie extends JPanel {
ArrayList<Double> liczby = new ArrayList<Double>();
public Rysowanie() {
try {
File file = new File("pliki/wynik5.xyz");
Scanner input = new Scanner(file);
input.useLocale(Locale.ENGLISH);
while (input.hasNextDouble()) {
dodajLiczbe(input.nextDouble());
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("Załadowalem tyle plikow: " + ileLiczb());
}
public void dodajLiczbe(double liczba) {
liczby.add(liczba);
}
public Double wezLiczbe(int indeks) {
return liczby.get(indeks);
}
public int ileLiczb() {
return liczby.size();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
int x;
int z;
int c = 0;
int d = 1;
int e = 2;
for (int i = 0; i < liczby.size(); i++) {
x = (int) (wezLiczbe(e) * Math.sin(wezLiczbe(c) * Math.pow(10, -6)));
z = (int) (wezLiczbe(e) * Math.cos(wezLiczbe(c) * Math.pow(10, -6)));
g.setColor(Color.blue);
g.drawOval(x, z, d, d);
System.out.println("Narysowalem kropke o indeksie: " + x + " oraz " + z);
if (c < liczby.size() - 3) {
c = c + 3;
} else if (e < liczby.size() - 3) {
e = e + 3;
}
}
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public static void main(String[] args) {
JFrame frame = new JFrame("NIE WIEM");
JPanel world = new Rysowanie();
frame.getContentPane().add(world);
frame.setLocation(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
}
Plik jeśli by ktoś potrzebował to wrzucam na SS ponieważ załączniki tego nie obsługują, przynajmniej nie widzę na liście formatów.