Skip to content

Instantly share code, notes, and snippets.

@mhazim2
Last active May 27, 2018 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mhazim2/1109ba0606a4d45f253a2c900edc6ef7 to your computer and use it in GitHub Desktop.
Save mhazim2/1109ba0606a4d45f253a2c900edc6ef7 to your computer and use it in GitHub Desktop.
49. OOP14 : Class dalam JAVA
// Ruang2D.java
// Menggunakan class Pair yang sudah dibuat sebelumnya
import java.io.*;
class Pair<A,B> { // Class Pair dengan templating tipe data A dan B, Class adalah blueprint/cetakan untuk objek
private A first; // atribut pasangan pertama
private B second; // atribut pasangan kedua
public Pair(A first, B second) { // Constructor dari Pair, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan
this.first = first; // penggunaan this disini untuk membedakan variabel first dari atribut dan variable first dari parameter
this.second = second; // penggunaan this disini untuk membedakan variabel second dari atribut dan variable second dari parameter
}
public A getFirst() { // Getter dari atribut first, getter adalah sebuah method yang digunakan untuk pengambilan nilai dari suatu object atau attribute yang sudah berisi nilai
return first;
}
public void setFirst(A first) { // Setter dari atribut first, setter adalah sebuah method yang digunakan untuk memberikan nilai pada suatu attirubte
this.first = first;
}
public B getSecond() { // Getter dari atribut second, getter adalah sebuah method yang digunakan untuk pengambilan nilai dari suatu object atau attribute yang sudah berisi nilai
return second;
}
public void setSecond(B second) { // Setter dari atribut second, setter adalah sebuah method yang digunakan untuk memberikan nilai pada suatu attirubte
this.second = second;
}
}
class Segitiga { // Membuat class Segitiga
protected Pair<Double,Double> t1; // Membuat objek pair untuk menyimpan kordinat
protected Pair<Double,Double> t2; // Membuat objek pair untuk menyimpan kordinat
protected Pair<Double,Double> t3; // Membuat objek pair untuk menyimpan kordinat
public Segitiga(Double x1, Double y1, Double x2, Double y2, Double x3, Double y3) { // Constructor dari Segitiga, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan
this.t1 = new Pair<Double,Double>(x1,y1);
this.t2 = new Pair<Double,Double>(x2,y2);
this.t3 = new Pair<Double,Double>(x3,y3);
}
public double luas() { // Method untuk menghitung luas
// Rumus menghitung luas dari kordinat yang diketahui
double a = t2.getFirst()*t3.getSecond()+t1.getFirst()*t2.getSecond()+t3.getFirst()*t1.getSecond();
double b = t2.getFirst()*t1.getSecond()+t3.getFirst()*t2.getSecond()+t1.getFirst()*t3.getSecond();
return Math.abs(a-b)/2.0;
}
}
class Lingkaran { // Membuat class Lingkaran
protected Pair<Double,Double> pusat; // Membuat objek pair untuk menyimpan kordinat titik pusat
protected Double radius; // variable jari-jari lingkaran
public Lingkaran(Double x, Double y, Double radius) { // Constructor dari Lingkaran, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan
this.pusat = new Pair<Double, Double>(x, y);
this.radius = radius;
}
public double luas(){ // Method untuk menghitung luas
return 3.14*radius*radius;
}
}
public class Ruang2D{ // class utama
public static void main(String[] args){ // fungsi main di java
BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); // Membuat objek dataIn dari class BufferedReader untuk membaca inputan dari pengguna
String inp = "";
String delim = "[ ]+"; // string untuk pemisah
String[] temp;
Segitiga[] segitiga = new Segitiga[100]; // membuat array dari objek segitiga
Lingkaran[] lingkaran = new Lingkaran[100]; // membuat array dari objek lingkaran
try {
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris
String[] nData = inp.split(delim); // men-split string berdasarkan spasi
int n = Integer.parseInt(nData[0]); // mengkonversi string pada variable nData menjadi integer
Double sumLuasLingkaran = 0.0;
Double sumLuasSegitiga = 0.0;
for (int i = 0; i<n; i++){ // loop inputan selanjutnya
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris
String[] data = inp.split(delim); // men-split string berdasarkan spasi
Double x = Double.parseDouble(data[0]); // mengkonversi string dari variable data index ke-0 ke double
Double y = Double.parseDouble(data[1]); // mengkonversi string dari variable data index ke-1 ke double
Double r = Double.parseDouble(data[2]); // mengkonversi string dari variable data index ke-2 ke double
lingkaran[i] = new Lingkaran(x, y, r); // membuat objek lingkaran dari class Lingkaran dan memasukkan variable ke parameter x, y, r untuk diinisiasi
sumLuasLingkaran = sumLuasLingkaran + lingkaran[i].luas(); // menjumlah luas lingkaran
}
int m = Integer.parseInt(nData[1]); // mengkonversi string pada variable nData menjadi integer
for (int i = 0; i<m; i++){ // loop inputnan selanjutnya
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris
String[] data = inp.split(delim); // men-split string berdasarkan spasi
Double x1 = Double.parseDouble(data[0]); // mengkonversi string dari variable data index ke-0 ke double
Double y1 = Double.parseDouble(data[1]); // mengkonversi string dari variable data index ke-1 ke double
Double x2 = Double.parseDouble(data[2]); // mengkonversi string dari variable data index ke-2 ke double
Double y2 = Double.parseDouble(data[3]); // mengkonversi string dari variable data index ke-3 ke double
Double x3 = Double.parseDouble(data[4]); // mengkonversi string dari variable data index ke-4 ke double
Double y3 = Double.parseDouble(data[5]); // mengkonversi string dari variable data index ke-5 ke double
segitiga[i] = new Segitiga(x1, y1, x2, y2, x3, y3); // membuat objek lingkaran dari class Lingkaran dan memasukkan variable ke parameter untuk diinisiasi
sumLuasSegitiga = sumLuasSegitiga + segitiga[i].luas(); // menjumlah luas segitiga
}
Double rataanLuasLingkaran = sumLuasLingkaran/(1.0*n); // menghitung rataan luas lingkaran
Double rataanLuasSegitiga = sumLuasSegitiga/(1.0*m); // menghitung rataan luas segitiga
int nLingkaranDibawahRataan = 0;
int mSegitigaDibawahRataan = 0;
for (int i = 0; i<n; i++){ // menghitung banyaknya luas lingkaran yang lebih kecil dari rataanya
if (lingkaran[i].luas()<rataanLuasLingkaran){
nLingkaranDibawahRataan++;
}
}
for (int i = 0; i<m; i++){ // menghitung banyaknya luas segitiga yang lebih kecil dari rataanya
if (segitiga[i].luas()<rataanLuasSegitiga){
mSegitigaDibawahRataan++;
}
}
System.out.format("Lingkaran %.2f %d %d\n", rataanLuasLingkaran, nLingkaranDibawahRataan, n-nLingkaranDibawahRataan);
System.out.format("Segitiga %.2f %d %d\n", rataanLuasSegitiga, mSegitigaDibawahRataan, m-mSegitigaDibawahRataan);
} catch(IOException e) {
System.out.println("Error!");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment