Twitter: @grzegg
Kategoria: java, Tagi: - - .

Java – Matematyka, statystyka, wyjątki, pliki (11)

Jedenasta prezentacja do kursu „Wstęp do programowania”.
Treść:

  • Matematyka i statystyka – liczby pseudolosowe, wybrane biblioteki dostarczające metody służące obliczeniom matematycznym i statystycznym
  • Obsługa wyjątków
  • Zapis i odczyt plików tekstowych

Ta strona jest częścią starego kursu Javy. Nowy kurs, pt. “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”, jest znacznie rozszerzony i dostosowany fo Javy 8. Jego forma jest także znacznie bardziej przystępna dla korzystających wyłącznie z treści on-line. Dostępne materiały znajdziesz tutaj.


Żródła

Liczby pseudolosowe

Różne sposoby generowania liczb pseudolosowych


import java.util.Random;

public class Przypadek {

	public static void main(String[] args) {
		Random randomGenerator = new Random();
		// prawda lub fałsz
		System.out.println("boolean:    "+randomGenerator.nextBoolean());	
		// liczba całkowita z zakresu int
		System.out.println("int:        "+randomGenerator.nextInt());
		// liczba całkowita z zakresu 0-10 (do liczby w nawiasie -1)
		System.out.println("int [0-19]: "+randomGenerator.nextInt(11));
		// liczba całkowita z zakresu long
		System.out.println("long:       "+randomGenerator.nextLong());
		// ułamek float z zakresu 0-1 (bez 1)
		System.out.println("float:      "+randomGenerator.nextFloat());
		// ułamek double z zakresu 0-1 (bez 1)
		System.out.println("double:     "+randomGenerator.nextDouble());			

		// ułamek double z zakresu 0-1 (bez 1)
		System.out.println("Math.random(): "+Math.random());	
	}
}


Math

Wybrane metody klasy Math


public class Matematyka {
	public static void main(String[] args) {
		System.out.println("Zaokrąglenie (round):   "+Math.round(3.49));
		System.out.println("Zaokrąglenie (rint)     "+Math.rint(3.49));
		System.out.println("Zaokrąglenie w dół:     "+Math.floor(3.49));
		System.out.println("Zaokrąglenie w górę:    "+Math.ceil(3.49));
		System.out.println("Liczba mniejsza:        "+Math.min(3.49, 3.51));
		System.out.println("Liczba większa:         "+Math.min(3.49, 3.51));
		System.out.println("Wartość absolutna:      "+Math.abs(-3.49));
		System.out.println("Potęga:                 "+Math.pow(2.0, 3.0));
		System.out.println("Pierwiastek kwadratowy: "+Math.sqrt(9.0));

		System.out.println("Pi:                     "+Math.PI);
		System.out.println("e:                      "+Math.E);

	}
}

Statystyka

Wybrane metody statystyczne dostępne w pakiecie org.apache.commons.math


import org.apache.commons.math3.stat.StatUtils;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import org.apache.commons.math3.stat.inference.TestUtils;

public class Statystyka {

	public static void main(String[] args) {
		DescriptiveStatistics stats = new DescriptiveStatistics();
		for (int i = 0; i < 100; i++) {
			stats.addValue(Math.random());
		}
		System.out.println(" *** Stosujemy DescriptiveStatistics() ***");
		System.out.println("Średnia:           "+stats.getMean());
		System.out.println("W. najwięsza:      "+stats.getMax());
		System.out.println("W. najmniejsza:    "+stats.getMin());
		System.out.println("Odch. standardowe: "+stats.getStandardDeviation());
		System.out.println("Suma:              "+stats.getSum());
		System.out.println("Wariancja:         "+stats.getVariance());

		System.out.println(" *** StatUtils ***");
		double[] dane = {2.0, 4.0, 5.0, 4.0, 3.0, 3.5, 5.5};
		System.out.println("Średnia:           "+StatUtils.mean(dane));
		System.out.println("W. najwięsza:      "+StatUtils.max(dane));
		System.out.println("W. najmniejsza:    "+StatUtils.min(dane));
		System.out.println("Suma kwadratów:    "+StatUtils.sumSq(dane));

		System.out.println(" *** TestUtils ***");
		double[] dane1 = {2.0, 4.0, 5.0, 4.0, 3.0, 3.5, 5.5};
		double[] dane2 = {2.0, 6.0, 5.0, 6.0, 3.0, 6.5, 5.5};
		long[] obserwowane = {30,20};
		double[] spodziewane = {37.5, 12.5};
		try {
			System.out.println("t-test dwie próbki:      "+
					TestUtils.pairedTTest(dane1, dane2));
			System.out.println("t-test dwie próbki (+p): "+
					TestUtils.pairedTTest(dane1, dane2, 0.05));


			System.out.println("Chi-kwadrat:             "+
					TestUtils.chiSquare(spodziewane, obserwowane));
			System.out.println("Chi-kwadrat (p):         "+
					TestUtils.chiSquareTest(spodziewane, obserwowane));
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} 
	}
}

Hazardzista

Symulacja zachowania hazardzisty (patrz prezentacja)


import java.util.Random;

public class Hazardzista {

	public static void main(String[] args) {
		int poziomZasobow = 100;
		int cel = 1000;
		int liczbaGier = 100;
		double wygrane = 0;
		double procentWygranych = 0;
		for (int i = 0; i < liczbaGier; i++) {
			int zasoby = poziomZasobow;
			while (zasoby > 0 &amp;amp;&amp;amp; zasoby < cel) {
				double wynik = Math.random();
				if (wynik < 0.5) zasoby--;
				else zasoby++;
			}
			if (zasoby == cel)
				wygrane++;
		}
		procentWygranych = (wygrane / liczbaGier) * 100;
		System.out.println("Wygranych: " + procentWygranych + "%");
	}
}


Pliki

Prosty zapis i odczyt pliku tekstowego.


import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class Pliki {

	public static void main(String[] args) {

		String plik = "dane.txt";
		// Zapis w pliku
		PrintWriter out;
		try {
			out = new PrintWriter(plik);
			out.println("Raz");
			out.println("Dwa");
			out.println("Trzy");
			out.close();
		} catch (FileNotFoundException e) {
			System.out.println("Brak Pliku!");
			e.printStackTrace();
		}

		// Odczyt pliku
		File plikDane = new File(plik);
		Scanner skaner;
		ArrayList<String> dane = new ArrayList<String>();
		int suma =0;
		try {
			skaner = new Scanner(plikDane);
			while (skaner.hasNextLine()) {
				dane.add(skaner.nextLine());
			}
		} catch (FileNotFoundException e) {
			System.out.println("Brak Pliku do odczytania!");
			e.printStackTrace();
		}
		System.out.println("Odczytane dane: "+dane);
		System.out.println("Odczytane dane po kolei: ");
		for (String d : dane) System.out.println(d);
	}
}

Leave a Reply