Zapisywanie wyników losowania do pliku w programie Totalizator Sportowy

0

Siemano, mam do napisania totalizator sportowy, który zapisuje do pliku podane przez nas liczby oraz wynik losowania + daty i wyniki poprzednich losowań. Mam problem z zapisywaniem wyników(ogólnie tych z datą i obecnego -.-)
Rozbiłem kod na 3 klasy i nie wiem, czy dobrze zrobiłem :P

Główna klasa:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Application {

	static Draw l = new Draw();
	Results r= new Results();

	public static void displayOptions() {
		System.out.println("Wybierz co chcesz zrobić: ");
		System.out.println("1.");
		System.out.println("2");
		System.out.println("3.");
		System.out.println("4. Wprowadź nowe liczby: ");
		System.out.println("5.Wyjdź");
	}

	public static void WriteToFile(int[] tab) throws FileNotFoundException {
		PrintWriter zapis = new PrintWriter("Lottery.txt");
		for (int i = 0; i < tab.length; i++) {
			zapis.println(tab[i]);
		}
		zapis.close();
	}

	public static void enterData()throws java.io.IOException  {
		// int n=0;
		int[] tab = new int[6];
		System.out.println("Wprowadz 6 liczb: ");
		// Scanner in = new Scanner(System.in);
		// n=in.nextInt();
		// in.close();
		// System.out.println("Wprowadz "+ n + " liczb");
		Scanner insert = new Scanner(System.in);
		for (int i = 0; i < 6; i++) {
			tab[i] = insert.nextInt();
			if (tab[i] <= 0) {
				System.out.println("Liczby muszą być większe od zera!");
				// i--;
			} else if (tab[i] > 48)
				System.out.println("Liczby nie moze byc wieksze od 48!");
			// i--;
		}
		System.out.println("Twoje liczby to: ");
		for (int i = 0; i < tab.length; i++) {
			WriteToFile(tab);
			System.out.print(" " + tab[i]);

		}

		// int x = tab[6];
		System.out.println();
		//insert.close();
	}

	public static void Console() throws IOException
	{
		int select = 0;
		do {
			Scanner input = new Scanner(System.in);
			select = input.nextInt();
			switch (select) {
			case 1:
				System.out.println(" Losowanie 7 z " + l.Generator(48, 6));
				break;
			case 2:
				System.out.println(" Losowanie 8 z " + l.Generator(46, 8));
				break;
			case 3:
				System.out.println(" Losowanie 3 z " + l.Generator(50, 3));
				break;
			case 4:
				enterData();
				displayOptions();
				Console();
				break;
			case 5:
				System.out.println("Koniec programu.");
				//input.close();
				break;
			default:
				System.out.printf("Błąd");
			}

		} while (select != 4);

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

		enterData();
		displayOptions();
		Console();
		
		
	}

}

2 klasa(losowanie):

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Random;

class Draw{
	public static void WriteToFile(int y) throws FileNotFoundException {
		PrintWriter zapis = new PrintWriter("Lottery.txt");
		for (int i = 0; i < 6; i++) {
			zapis.println(y);
		}
		zapis.close();
	}

	int Generator(int n, int y) throws FileNotFoundException {
		ArrayList<Integer> al = new ArrayList<Integer>();
		for (int i = 1; i <= n; i++)

			al.add(i);

		Random ran = new Random();
		System.out.print("Wylosowane liczby to :");
		for (int i = 0; i < y; i++) {
			Integer x = al.remove(ran.nextInt(al.size()));
			System.out.print(" " + x);
			//WriteToFile(x);
		}

		return n;
	}

}

3 klasa(wyniki):

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Results implements Serializable {
	static int[] tab;
	static char data;
	private static final long serialVersionUID = 1L;
	{
	this.tab=tab;
	this.data=data;
	}
	public static void main()throws IOException, ClassNotFoundException{
ObjectOutputStream wy = new ObjectOutputStream(new FileOutputStream("Lottery.txt"));
wy.close();
	Results wynik = new Results();
	wy.writeObject(wynik);
	 
}
	}

dodanie znaczników <code class="java"> - @furious programming

1
  1. Wywal zakomentowane linijki.
  2. Dlaczego masz 2 metody main w programie?
  3. Formatowanie linijek w klasie Results.
    3,5. Nazwy metod w Javie piszemyWTakiSposób, czyli zaczynamy z małej litery ;)
  4. Masz wszystko ze słówkiem static - ten kod nie jest obiektowy. Jako ćwiczenie spróbuj napisać to tak, żeby to słowo pojawiło się tylko i wyłącznie przy metodzie main.
  5. Masz za zadanie wypisać wyniki do pliku, a ty chcesz serializować klasę Results, po cholerę? :D Poczytaj trochę o I/O w Javie i na czym polegają te całe streamy (jeśli ci się bardzo śpieszy - luknij na klasę PrintWriter).
  6. Rzucasz wyjątkami przez cały program, zamiast je złapać od razu na miejscu (hasło do google: checked vs unchecked exceptions)
0

Dzięki udało mi się troszkę poprawić kod. Wyniki są zapisywane do pliku, teraz pozostaje kwestia dopisywania nowych wyników losowań bez kasowania zawartości pliku tekstowego(poprzednich losowań). Jakieś wskazówki? :P

0

Dzięki :D Ostatnia rzecz się została muszę jakoś przekształcić klasę losującą, żeby losowała bez powtórzeń.

import java.io.FileNotFoundException;
import java.util.Random;

public class Generator {

	public int[] generate(int count, int range) throws FileNotFoundException {
		int[] tablica=new int[count];
		Random ran = new Random();
		for (int i = 1; i <= count; i++){
			tablica[i-1] = ran.nextInt(range);
			
		}
		return tablica;
	}
}
1

Najlepiej w twoim wypadku wygenerować na początku listę int`ów z liczbami które możesz wylosować i losować index tej listy, a następnie wylosowaną liczbę usunąć z listy i powtarzać operacje do skutku.

0

Wygląda na to, że działa :P Dzięki!

0

Hmmm, a gdybym chciał zapisywać te wyniki do bazy danych? Help! :D

0

Wyświetla mi, że tabela już istnieje chociaż wcale tak nie jest -.- Jakieś porady?

        static String url ="jdbc:postgresql://localhost/postgres";
	static String baza ="postgres";
	static String login ="postgres"; 
	static String password =" ";
	
	public void createTable() throws SQLException {
		try {

			Connection conn = DriverManager.getConnection(url, login, password);
			Statement st = conn.createStatement();
			try {
				String nowa_tabela = "CREATE TABLE Wynikihehe(" + "Dane VARCHAR(30)";
				st.executeUpdate(nowa_tabela);
				System.out.println("Tabela została utworzona");
			} catch (SQLException e) {
				System.out.println("Uwaga! Tabela już istnieje");
			}
		} catch (SQLException e) {
			System.out.println("Uwaga! Mamy problemy z połączeniem!");
		}

	}
0

To niekoniecznie jest to że tabela istanieje. Po prostu brakuje Ci nawiasu zamykającego po VARCHAR(30).
Zobacz otwiersz nawias po nazwie tabeli i nigdzie go nie zamykasz

możesz też walic na stack Exception, wtedy więcej wyczytasz niż z Twojego sysouta.

1

Ty wyświetlasz, że tabela istnieje

System.out.println("Uwaga! Tabela już istnieje");

a nie program. Zamień np. na

System.out.println(e);
0

Udało się :P dzięki!

Pozostało jeszcze zapisywanie danych z pliku(wyniki losowania) do bazy danych :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1