Week01-02
/*
* HelloWorld.java
* A traditional Hello World program!
*/
// In Java, all programs reside in a class. This class is called HelloWorld,
// and should be saved in a file called HelloWorld.java. This class has a single
// method called main, which is the entry point to the program.
//
// Compiling the class with javac HelloWorld.java will produce a bytecode file
// called HelloWorld.class if compilation is successful. This bytecode can then
// be run on any machine with a java bytecode interpreter. You can run the
// bytecode in a console by typing java HelloWorld.
public class HelloWorld {
public static void main(String[] arg) {
String helloString = "Hello";
String worldString = "World!";
// In Java the System.out.println command displays the argument to the
// console. However the command below doesn't work, because helloWorldAString
// has not been declared. Try compiling this file to see what happens,
// and take a careful look at the error message that is produced.
System.out.println(helloString + " " + worldString);
// In Java, we can use the '+' operator to concatenate strings,
// so to fix this problem, either change the argument passed to the
// System.out.println method from (helloWorldString) to
// (helloString + " " + worldString)
// or declare the variable helloWorldString before it is used by
// System.out.println by inserting
// String helloWorldString = helloString + " " + worldString;
// In Java a variable can be declared anywhere in the code, so it is
// possible to declare a variable just before it is used, which makes for
// code that is easier to read and understand.
// It is conventional to use mixed case for variable names and method
// names in Java, with with the first letter lower case, and then the
// first letter of each internal word in upper case -- e.g. helloString.
// Class names start with a capital letter -- e.g. HelloWorld.java
// details at: http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html
}
}
/*
* QuadraticSolver.java 1.1 26/08/2011
*
* Copyright (c) University of Sheffield 2011
*/
import java.math.*;
import sheffield.*;
/**
* QuadraticSolver.java
* solves quadratic equations for x given a*x*x + b*x + c = 0
* the code should be modified so that a, b, and c are input by the user
*
* @author Mark Stevenson (mark.stevenson@sheffield.ac.uk)
* @author (based on code written by Richard Clayton)
* @version 1.1 26 August 2011
*/
public class QuadraticSolver {
public static void main(String[] arg) {
// default values for coefficients a, b, and c
// initially, these are stored as both integers and float.
// int aInt = 1, bInt = 2000000, cInt = 1;
// double aFloat = 1, bFloat = 2000000, cFloat = 1;
EasyReader keyboard = new EasyReader();
double aFloat = keyboard.readDouble("Input a value for a: ");
double bFloat = keyboard.readDouble("Input a value for b: ");
double cFloat = keyboard.readDouble("Input a value for c: ");
// declare variables to store the two values of x that satisfy the equation
double x1, x2;
// work out the solution with int types
// aInt -= 1/2;
// x1 = (-1 * bInt + Math.sqrt(bInt*bInt - 4 * aInt * cInt)) / (2 * aInt);
// x2 = (-1 * bInt - Math.sqrt(bInt*bInt - 4 * aInt * cInt)) / (2 * aInt);
// System.out.println("Solution with integer types is x1 = " + x1 + ", and x2 = " + x2 );
// work out the solution with double types
// aFloat -= 0.5;
x1 = (-1 * bFloat + Math.sqrt(bFloat * bFloat - 4 * aFloat * cFloat)) / (2 * aFloat);
x2 = (-1 * bFloat - Math.sqrt(bFloat * bFloat - 4 * aFloat * cFloat)) / (2 * aFloat);
System.out.println("Solution with double types is x1 = " + x1 + ", and x2 = " + x2);
System.out.println("a*x1*x1 + b*x1 + c = " + (aFloat * x1 * x1 + bFloat * x1 + cFloat));
System.out.println("a*x2*x2 + b*x2 + c = " + (aFloat * x2 * x2 + bFloat * x2 + cFloat));
} //main
} // class QuadraticSolver
import sheffield.*;
public class CycleComputer {
public static void main(String[] args) {
EasyReader myFile = new EasyReader("./timings.txt");
int amount = myFile.readInt();
double[] timings = new double[amount]; // Unit: s
for (int i = 0; i < amount; i++) {
timings[i] = myFile.readDouble();
}
Trip myTrip = new Trip(0.665, amount, timings);
double[] speeds = myTrip.getInstantaneousSpeed();
for (int i = 0; i < amount; i++) {
System.out.printf("Instantaneous speed: %.2f km/h\n", speeds[i]);
}
System.out.printf("Max speed in journey is: %.2f km/h\n", myTrip.getMaxSpeed());
System.out.printf("Total distance travelled: %.2f km\n", myTrip.getTotalDistance());
System.out.printf("Total time taken: %.2f mins\n", myTrip.getTotalTime() / 60);
}
}
public class Trip {
private static final double PI = 3.1415927;
private double diameter; // Unit: m
private double circumference; // Unit: m
private int rotationAmount;
private double timings[]; // Unit: s
private double speeds[]; // Unit: km/h
private double maxSpeed = 0; // Unit: km/h
private double totalDistance = 0; // Unit: m
private double totalTime = 0; // Unit: s
public Trip(double diameter, int rotationAmount, double[] timings) {
this.diameter = diameter;
this.circumference = diameter * PI;
this.rotationAmount = rotationAmount;
this.timings = timings;
calcInstantaneousSpeed();
calcMaxSpeed();
clacTotalDistance();
calcTotalTime();
}
public double getDiameter() {
return diameter;
}
public double getCircumference() {
return circumference;
}
public int getRotationAmount() {
return rotationAmount;
}
private void calcInstantaneousSpeed() {
speeds = new double[rotationAmount]; // Unit: km/h
for (int i = 0; i < rotationAmount; i++) {
speeds[i] = circumference / timings[i] * 3.6; // m/s -> km/h
}
}
private void calcMaxSpeed() {
for (int i = 0; i < rotationAmount; i++) {
maxSpeed = maxSpeed > speeds[i] ? maxSpeed : speeds[i];
}
}
private void clacTotalDistance() {
for (int i = 0; i < rotationAmount; i++) {
totalDistance += timings[i] / 3600 * speeds[i];
}
}
private void calcTotalTime() {
for (int i = 0; i < rotationAmount; i++) {
totalTime += timings[i];
}
}
public double[] getInstantaneousSpeed() {
return speeds;
}
public double getMaxSpeed() {
return maxSpeed;
}
public double getTotalDistance() {
return totalDistance;
}
public double getTotalTime() {
return totalTime;
}
}
Week 03
/*
* FoodStore.java 1.0 26/08/2011
*
* Copyright (c) University of Sheffield 2011
*/
/**
* FoodStore.java
* <p>
* A simple class used in COM6516 lab class
*/
// this line of code declares the class
public class FoodStore {
// this is the constructor, which is called when a new object is created
// the constructor name is always the same as the class name
// classes can have more than one constructor
// the constructor make take zero or more parameters
// in this case there is one parameter (int a) that is used to set the
// instance field of the class
public FoodStore(int a) {
amountStored = a;
}
// these are class methods, which enable the value of the instance
// field to be modified
// these methods have a public access modifier, because they need to
// be called by other classes
// neither class method returns anything, so the return type is void
public void depositFood(int amountToDeposit) {
depositAmount += amountToDeposit;
amountStored = amountStored + amountToDeposit;
}
public void withdrawFood(int amountToWithdraw) {
withdrawAmount += amountToWithdraw;
amountStored = amountStored - amountToWithdraw;
}
// these are accessor methods, which return the value of the
// instance field
public int getAmountStored() {
return (amountStored);
}
// this is the instance field, which is an attribute associated with
// each object of the FoodStore class
// the access modifier is private, which means that this field can
// only be accessed through the class methods
// by keeping instance fields private there is a well specified interface
// to the data associated with each object
// this approach is called encapsulation
private int amountStored;
private int depositAmount = 0;
private int withdrawAmount = 0;
public int getDepositAmount() {
return depositAmount;
}
public int getWithdrawAmount() {
return withdrawAmount;
}
}
public class TestFoodStore {
public static void main(String[] args) {
// create a new FoodStore object called MyFoodStore
// by invoking the constructor
FoodStore MyFoodStore = new FoodStore(10);
// display the amount stored by calling the getAmountStored
// method associated with the MyFoodStore object
System.out.println("Contains " + MyFoodStore.getAmountStored());
System.out.println("Deposit 5 foods.");
MyFoodStore.depositFood(5);
System.out.println("Contains " + MyFoodStore.getAmountStored());
System.out.println("Withdraw 10 foods.");
MyFoodStore.withdrawFood(10);
System.out.println("Contains " + MyFoodStore.getAmountStored());
}
}
import sheffield.*;
class FoodManage {
public static void main(String[] args) {
FoodStore MyFoodStore = new FoodStore(10);
EasyReader keyboard = new EasyReader();
int numberOfWithdrawal = 0;
int numberOfDeposit = 0;
int numberOfRefuse = 0;
while (true) {
int amount = keyboard.readInt("Food manage: ");
if (amount > 0) {
MyFoodStore.depositFood(amount);
System.out.println("Deposit " + amount + " foods.");
numberOfDeposit++;
} else if (amount < 0) {
if (MyFoodStore.getAmountStored() < -amount) {
System.out.println("Transaction refused.");
numberOfRefuse++;
} else {
MyFoodStore.withdrawFood(-amount);
System.out.println("Withdraw " + (-amount) + " foods.");
numberOfWithdrawal++;
}
} else {
System.out.println("Nothing to do.");
}
System.out.println("Total number of withdrawals: " + numberOfWithdrawal);
System.out.println("Total number of deposits: " + numberOfDeposit);
System.out.println("Total number of refused transactions: " + numberOfRefuse);
System.out.println("Total amount of food deposited: " + MyFoodStore.getDepositAmount() + " foods.");
System.out.println("Total amount of food withdrawn: " + MyFoodStore.getWithdrawAmount() + " foods.");
}
}
}
class TestBasket {
public static void main(String[] args) {
Item[] shopping = {new Item("baked beans", 0.3), new Item("tomato soup", 0.4)};
for (Item i : shopping) {
System.out.println(i.toString());
}
Basket myBasket = new Basket(shopping);
System.out.println("Total price: " + myBasket.total());
}
}
/**
* Basket.java
* <p>
* Part of lab class for COM6516
* Written by Mark Stevenson mark.stevenson@sheffield.ac.uk
* Based on code written by Steve Maddock
* Last modified 19 September 2014
*/
public class Basket {
// Constructor function
// Create a instance of Basket
public Basket(Item[] it) {
items = it;
}
// get total price of items in the basket
public double total() {
double tot = 0.0;
for (int i = 0; i < items.length; i++) {
tot += items[i].getPrice();
} // for loop
return tot;
}
// item collections
private Item[] items;
}
/**
* Item.java
* <p>
* Part of lab class for COM6516
* Written by Mark Stevenson mark.stevenson@sheffield.ac.uk
* Based on code written by Steve Maddock and Richard Clayton
*/
public class Item {
public Item(String n, double p) {
name = n;
price = p;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
// using ukp to denote pounds sterling as unicode pound symbol
// does not display properly in MS Command Window
@Override
public String toString() {
return ("Class type: " + getClass().getTypeName() +
" Class name: " + getClass().getName() +
" Name: " + name +
" Price: " + price);
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (obj == null) return false;
if (obj.getClass() != this.getClass()) return false;
if (((Item) obj).getName() == this.getName() && ((Item) obj).getPrice() == this.getPrice()) return true;
return false;
}
// equals method to be added here
//public boolean equals(Object obj) {
// check if identical objects
// must be false if parameter is null
// must be false if objects have different classes
// now we can cast and do something specific for Item
//}
// instance fields
private final double price;
private final String name;
public static void main(String[] args) {
String TESTNAME = "testObject";
double TESTPRICE = 10.0;
Item testObject = new Item(TESTNAME, TESTPRICE);
System.out.println("Name:");
System.out.println("Actual field " + testObject.getName());
System.out.println("Expected " + TESTNAME);
System.out.println("Price:");
System.out.println("Actual field " + testObject.getPrice());
System.out.println("Expected " + TESTPRICE);
}
}
class TestItemEquals {
public static void main(String[] args) {
Item tomato = new Item("Tomato", 0.2);
Item tomatoCopy = tomato;
System.out.println(tomato.equals(tomatoCopy));
}
}
Week 04
class Person {
String name;
String birth;
Person(String name, String birth) {
this.name = name;
this.birth = birth;
}
@Override
public String toString() {
return "Name: " + name + "\n" +
"Birth: " + birth;
}
}
class Student extends Person {
private String course;
Student(String name, String birth, String course) {
super(name, birth);
this.course = course;
}
@Override
public String toString() {
return "Name: " + name + "\n" +
"Birth: " + birth + "\n" +
"Course: " + course;
}
}
class Tutor extends Person {
private String office;
Tutor(String name, String birth, String office) {
super(name, birth);
this.office = office;
}
@Override
public String toString() {
return "Name: " + name + "\n" +
"Birth: " + birth + "\n" +
"Office: " + office;
}
}
public class TestPerson {
public static void main(String[] args) {
Person testPerson = new Person("Walker", "1996/06/16");
System.out.println(testPerson);
Student testStudent = new Student("Neo", "1996/08/01", "COM6516");
System.out.println(testStudent);
Tutor testTutor = new Tutor("Anand", "1980/01/01", "C14");
System.out.println(testTutor);
}
}
public class Sheep extends Animal {
public void talk() {
System.out.println("Baaa!");
}
}
public class NewAnimalTest {
public static void main(String[] args) {
Animal cow = new Cow();
Animal pig = new Pig();
Animal sheep = new Sheep();
Animal[] animals = new Animal[3];
animals[0] = cow;
animals[1] = pig;
animals[2] = sheep;
for (Animal testAnimal : animals) {
testAnimal.talk();
}
}
}
public abstract class Animal {
public void talk() {
System.out.println("Animals can't talk");
}
}
/*
* AnimalTest.java 1.0 01/10/2010
*
* Copyright (c) University of Sheffield 2011
*/
/**
* AnimalTest.java
* <p>
* Test class to demonstrate inheritance
*
* @author Mark Stevenson (mark.stevenson@sheffield.ac.uk)
* Original code written by Guy Brown and Richard Clayton
* @version 1.1 01 October 2010
*/
public class AnimalTest {
public static void main(String[] args) {
Cow daisy = new Cow();
Pig wilbur = new Pig();
// Animal animal = new Animal();
Animal[] farm = new Animal[4];
// farm[0] = animal;
farm[0] = daisy;
farm[1] = wilbur;
for (int i = 0; i < 2; i++) {
farm[i].talk();
} // for
} // main
}
public interface Drawable {
public void draw(sheffield.EasyGraphics g);
}
/**
* Shape.java
* <p>
* A simple class used in week 4 to implement an abstract superclass
*
* @version 1.1 26 August 2011
* @author Richard Clayton (r.h.clayton@sheffield.ac.uk)
*/
import sheffield.*;
public abstract class Shape implements Drawable {
// instance fields
// these could be implemented as protected (as shown in the lecture notes)
// or more safely as private, with getX and getY methods as shown here
private double x;
private double y;
public Shape() {
this(0.0, 0.0);
}
public Shape(double x, double y) {
setPosition(x, y);
}
public void setPosition(double xval, double yval) {
x = xval;
y = yval;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public abstract double area();
public abstract void draw(EasyGraphics g);
}
Week 05
/**
* Multiplication table
* Create a table to show 1 to 9 multiplication.
*/
public class MultiplicationTable {
/**
* World starts here
*
* @param args Command line arguments
*/
public static void main(String[] args) {
int num = 9;
System.out.print(" |");
for (int i = 0; i < num; i++) {
System.out.printf("%4d", i + 1);
}
System.out.println();
System.out.print("---");
for (int i = 0; i < num; i++) {
System.out.print("----");
}
System.out.println("--");
for (int i = 0; i < num; i++) {
System.out.print((i + 1) + " |");
for (int j = 0; j < num; j++) {
System.out.printf("%4d", (i + 1) * (j + 1));
}
System.out.println();
}
}
}
/**
* Test Circle class
*/
public class TestCircle {
/**
* World starts here
*
* @param args Command line arguments
*/
public static void main(String[] args) {
System.out.println(Circle.PI);
System.out.println(Circle.radToDeg(3.141));
Circle myCircle = new Circle(1);
System.out.println(myCircle.toString());
System.out.println(myCircle.getClass());
Circle myCircle2 = new Circle(1);
System.out.println(myCircle.equals(myCircle2));
}
}
/*
* Circle.java
*
* Copyright (c) University of Sheffield 2014
*/
public class Circle {
// class field
public static final double PI = 3.1415927;
// instance field
private double radius;
// constructor
public Circle(double r) {
radius = r;
}
// class method
public static double radToDeg(double angleRad) {
return angleRad * 180.0 / PI;
}
// instance methods
public double area() {
// returns area of the circle
return PI * radius * radius;
}
public double circumference() {
// returns circumference of the circle
return 2.0 * PI * radius;
}
@Override
public String toString() {
return "Circle radius: " + radius;
}
@Override
public boolean equals(Object obj) {
// Check if the two objects' class are same, then if the references are same
return obj.getClass() == this.getClass() && obj == this;
}
}
class PhDThesis extends Publication {
private int numChapters;
private String university;
private String supervisor;
PhDThesis(String title, String author, int ISBN, int numPages, int numChapters, String university, String supervisor) {
super(title, author, ISBN, numPages);
this.numChapters = numChapters;
this.university = university;
this.supervisor = supervisor;
}
@Override
public String toString() {
return super.toString() + "[numChapters=" + numChapters +
",university=\"" + university + "\",supervisor=\"" + supervisor + "\"]";
}
}
public class TestPublication {
public static void main(String[] args) {
Publication publication = new Publication();
Book book = new Book("Test Book", "Test Author", 10000, 1000, 100);
MagazineArticle magazineArticle = new MagazineArticle("Test Mag", "Test Author", 10001, 10, "Test Name", 1, 2, 3);
PhDThesis phDThesis = new PhDThesis("Test Title", "Neo", 10002, 100, 10, "UoS", "Anand");
System.out.println(publication.toString());
System.out.println(book.toString());
System.out.println(magazineArticle.toString());
System.out.println(phDThesis.toString());
}
}
import java.util.ArrayList;
import java.util.Random;
/**
* Create a random number table
*/
public class RandomTable {
/**
* World starts here
*
* @param args Command line arguments
*/
public static void main(String[] args) {
Random random = new Random(0);
int num = 9;
ArrayList<Integer> columns = new ArrayList<>();
while (columns.size() < num) {
int randomNum = random.nextInt(num + 1);
if (randomNum > 0 && !columns.contains(randomNum)) {
columns.add(randomNum);
}
}
ArrayList<Integer> rows = new ArrayList<>();
while (rows.size() < num) {
int randomNum = random.nextInt(num + 1);
if (randomNum > 0 && !rows.contains(randomNum)) {
rows.add(randomNum);
}
}
System.out.print(" |");
for (int i = 0; i < num; i++) {
System.out.printf("%4d", columns.get(i));
}
System.out.println();
System.out.print("---");
for (int i = 0; i < num; i++) {
System.out.print("----");
}
System.out.println("--");
for (int i = 0; i < num; i++) {
System.out.print(rows.get(i) + " |");
for (int j = 0; j < num; j++) {
System.out.printf("%4d", rows.get(i) * columns.get(j));
}
System.out.println();
}
}
}
Week 07
/*
* Developed by Neo on 05/11/18 11:12.
* Last modified 05/11/18 10:39.
* Copyright (c) 2018. All rights reserved.
*/
import sheffield.EasyReader;
/**
* This class can generate a walking plan for a old person
*/
public class GenerateWalkingPlan {
/**
* Program starts here.
*
* @param args command line arguments.
*/
public static void main(String[] args) {
// Ask for user's name and age for creating plan
EasyReader myReader = new EasyReader();
String name = myReader.readString("What is your name? ");
int age = myReader.readInt("Hello " + name + ", how old are you? ");
// Create a walk plan and print it
WalkingPlan newPlan = new WalkingPlan(name, age);
newPlan.generate();
newPlan.toPrint();
}
}
/*
* Developed by Neo on 05/11/18 11:10.
* Last modified 05/11/18 10:45.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.Random;
/**
* This is walk plan for old person
*/
class WalkingPlan {
/**
* This plan only contains 14 days plan
*/
private static final int PLAN_DAYS = 14;
/**
* We define more than 1500 meters as hard day
*/
private static final int HARD_MODE = 1500;
/**
* If two hard days in a row, we need change second day as relax day
*/
private static final int RELAX_MODE = 1000;
/**
* User's name
*/
private String name;
/**
* User's age
*/
private int age;
/**
* Every days plan
*/
private int[] plan;
/**
* The total meters of whole plan
*/
private int total;
/**
* Average meters of this plan
*/
private long average;
/**
* Constructor method for WalkingPlan
*
* @param name user's name
* @param age user's age
*/
WalkingPlan(String name, int age) {
this.name = name;
this.age = age;
// Initialize these variables
plan = new int[PLAN_DAYS];
total = 0;
average = 0;
}
/**
* This method will generate a waling plan
*/
void generate() {
Random random = new Random();
for (int i = 0; i < PLAN_DAYS; i++) {
plan[i] = 10 * (10 + random.nextInt(240)); // Generate a int in [100, 2500)
if (i > 0) {
if (plan[i] > HARD_MODE && plan[i - 1] > HARD_MODE)
plan[i] = RELAX_MODE;
}
total += plan[i];
}
average = Math.round((double) total / PLAN_DAYS);
}
/**
* This method will print walking plan
*/
void toPrint() {
System.out.println();
System.out.println(name + "(age=" + age + ") - this is your walking plan:");
for (int i = 0; i < PLAN_DAYS; i++) {
System.out.print("Day " + (i + 1) + ": walk " + plan[i] + "m");
if (plan[i] > HARD_MODE)
System.out.println(" <--- hard");
else
System.out.println();
}
System.out.println();
System.out.println("Total number of meters walked = " + total);
System.out.println("Average number of meters walked per day = " + average);
}
}
Week 08
/*
* Developed by Neo on 12/11/18 10:21.
* Last modified 12/11/18 10:21.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.*;
public class ListStringConvert {
public static void main(String[] args) {
List<String> fixedList = Arrays.asList("elephant","lion","leopard", "tiger");
System.out.println(fixedList);
List<String> myList = new LinkedList<String>(fixedList);
// Iterator<String> iter = myList.iterator();
ListIterator<String> iter = myList.listIterator();
ArrayList<String> newList = new ArrayList<>();
while (iter.hasNext()) {
newList.add(iter.next().toUpperCase());
}
System.out.println(newList);
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
/*
HashSetTest.java
Example class that demonstrates used of HashSet Collection.
*/
public class HashSetTest {
public static void main(String args[]) {
Set<Person> people = new TreeSet<Person>(new AgeComparator());// here we declare people to be the most general type, which makes it possible to swap HashSet for TreeSet.
StringTokenizer st;
String firstName, surname, line;
int age;
// read data from file
// (The try/catch construction catches an exception, ie. error,
// if the file is not found)
try {
Scanner file = new Scanner(new File("Person.txt"));
// assume file has at least one line
// that specifies the number of records
int numData = file.nextInt();
// read in each line, and split into tokens
for (int i = 0; i < numData; i++) {
line = file.next();
st = new StringTokenizer(line, "|");
firstName = st.nextToken();
surname = st.nextToken();
age = Integer.parseInt(st.nextToken());
people.add(new Person(firstName, surname, age));
}
file.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
// iterate through hash set
Iterator<Person> iter = people.iterator();
while (iter.hasNext()) {
Person p = iter.next();
if (!p.getSurname().equals("James") && !p.getSurname().equals("Cole")) {
iter.remove();
}
}
Iterator<Person> iter = people.iterator();
while (iter.hasNext()) {
Person p = iter.next();
if (p.getSurname().equals("Wright-Phillips")) {
iter.remove();
}
}
// iterate through hash set
Iterator<Person> i = people.iterator();
while (i.hasNext()) {
Person p = i.next();
System.out.print(p);
System.out.print(", hash code ");
System.out.println(p.hashCode());
}
System.out.println("Using a comparator of a person class :");
Person firstPerson = people.iterator().next();//grab the first one
for (Person p : people)
System.out.println(firstPerson + " compared to " + p + " returns " + firstPerson.compareTo(p));
System.out.println("Using AgeComparator :");
Comparator<Person> comparator = new AgeComparator();
firstPerson = people.iterator().next();//grab the first one
for (Person p : people)
System.out.println(firstPerson + " compared to " + p + " returns " + comparator.compare(firstPerson, p));
}
}
import java.util.*;
public class AgeComparator implements Comparator<Person> {
public int compare(Person a, Person b) {
return b.getAge() - a.getAge();
}
}
/*
Shakespeare.java
Reads information from Shakespeare.txt
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Shakespeare {
public static void main(String args[]) {
String line;
String wd;
StringTokenizer st;
List<String> words = new LinkedList<String>();
// Read data from file and split into tokens, i.e. words
// (The try/catch construction catches an exception, ie. error,
// if the file is not found)
try {
Scanner file = new Scanner(new File("Shakespeare.txt"));
// read in each line, and split into tokens
while (file.hasNext()) {
line = file.next();
st = new StringTokenizer(line, " .,:?'");
// space, full stop, comma, etc.
// are included as token delimiters
// and are thus not tokens themselves
while (st.hasMoreTokens()) {
wd = st.nextToken();
words.add(wd);
}
}
file.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
System.out.println("words: " + words);
for (String word : words) {
if (word.charAt(0) == 'a')
System.out.print(word + ", ");
}
System.out.println();
// Produce a sorted list
Set<String> wds = new TreeSet<String>(new StringComparator());
wds.addAll(words);
System.out.println("sorted words: " + wds);
List<String> lowerWords = new LinkedList<String>();
for (String word : words)
lowerWords.add(word.toLowerCase());
Set<String> lowerWds = new TreeSet<String>(new StringComparator());
lowerWds.addAll(lowerWords);
for (String word : lowerWds)
System.out.println(word + ": " + Collections.frequency(lowerWords, word));
}
}
/*
* Developed by Neo on 12/11/18 11:40.
* Last modified 12/11/18 11:40.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.Comparator;
public class StringComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
/*
* Developed by Neo on 12/11/18 14:40.
* Last modified 12/11/18 14:40.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.ArrayList;
import java.util.List;
public class ListAgain {
public static void main(String[] args) {
List<Integer> listA = new ArrayList<>();
listA.add(1);
listA.add(2);
listA.add(3);
listA.add(4);
listA.add(5);
List<Integer> listB = new ArrayList<>();
listB.add(3);
listB.add(4);
listB.add(5);
listB.add(6);
listB.add(7);
List<Integer> listC = new ArrayList<>(listA);
listC.retainAll(listB);
listA.addAll(listB);
listA.removeAll(listC);
System.out.println(listA);
}
}
/*
* Developed by Neo on 12/11/18 15:26.
* Last modified 12/11/18 15:26.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class MoreList {
public static void main(String[] args) {
LinkedList<Integer> listA = new LinkedList<>();
listA.add(0);
listA.add(1);
listA.add(2);
listA.add(3);
listA.add(4);
List<Integer> listB = new ArrayList<>();
listB.add(5);
listB.add(6);
listB.add(7);
listB.add(8);
listB.add(9);
ListIterator<Integer> iteratorA;
ListIterator<Integer> iteratorB;
// 1
iteratorA = listA.listIterator();
iteratorB = listB.listIterator();
while (iteratorA.hasNext()) {
iteratorA.next();
if (iteratorB.hasNext())
iteratorA.add(iteratorB.next());
}
while (iteratorB.hasNext()) {
iteratorA.add(iteratorB.next());
}
System.out.println("List A=" + listA);
System.out.println("List B=" + listB);
// 2
iteratorB = listB.listIterator();
while (iteratorB.hasNext()) {
iteratorB.next();
if (iteratorB.hasNext()) {
iteratorB.next();
iteratorB.remove();
}
}
System.out.println("List A=" + listA);
System.out.println("List B=" + listB);
// 3
listA.removeAll(listB);
System.out.println("List A=" + listA);
System.out.println("List B=" + listB);
}
}
Week 09
/*
* Developed by Neo on 19/11/18 11:54.
* Last modified 19/11/18 11:54.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
import java.awt.*;
public class CornerString extends JFrame {
public CornerString() {
super("Corner String");
//For better looks.
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setSize(960, 480);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setContentPane(new StringPanel());
this.setVisible(true);
}
public static void main(String[] args) {
new CornerString();
}
public class StringPanel extends JPanel {
public StringPanel() {
super(new BorderLayout());
JLabel label1 = new JLabel("To be or not to be");
JLabel label2 = new JLabel("To be or not to be");
JLabel label3 = new JLabel("To be or not to be");
JLabel label4 = new JLabel("To be or not to be");
label1.setFont(new Font("Consolas", Font.PLAIN, 32));
label1.setForeground(Color.BLUE);
label2.setFont(new Font("Comic Sans MS", Font.PLAIN, 32));
label2.setForeground(Color.GREEN);
label3.setFont(new Font("Monospaced", Font.PLAIN, 32));
label3.setForeground(Color.RED);
label4.setFont(new Font("Courier", Font.PLAIN, 32));
label4.setForeground(Color.YELLOW);
JPanel northPanel = new JPanel();
northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.X_AXIS));
northPanel.add(label1);
northPanel.add(Box.createHorizontalGlue());
northPanel.add(label2);
JPanel southPanel = new JPanel();
southPanel.setLayout(new BoxLayout(southPanel, BoxLayout.X_AXIS));
southPanel.add(label3);
southPanel.add(Box.createHorizontalGlue());
southPanel.add(label4);
add(northPanel, BorderLayout.NORTH);
add(southPanel, BorderLayout.SOUTH);
}
}
}
/*
* Developed by Neo on 19/11/18 15:44.
* Last modified 19/11/18 15:44.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
public class GIFFrame extends JFrame {
public GIFFrame() {
super("GIF Frame");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
ImageIcon imageIcon = new ImageIcon("globe.gif", "globe");
setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());
JLabel imageLabel = new JLabel(imageIcon);
add(imageLabel);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new GIFFrame();
}
}
Week 10
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame implements ActionListener {
private MyPanel drawingPanel;
private MyFrame() {
int width = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2.0);
int height = (int) (width / 16.0 * 9.0);
setSize(width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//For better looks.
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
drawingPanel = new MyPanel();
drawingPanel.setPolygon(5);
Container contentPane = this.getContentPane();
contentPane.add(drawingPanel, BorderLayout.CENTER);
JPanel columnOfButtons = new JPanel(new GridLayout(8, 1));
ButtonGroup buttonGroup = new ButtonGroup();
for (int i = 3; i < 10; i++) {
makeRadioButton(columnOfButtons, String.valueOf(i), buttonGroup, this);
}
JButton exit = new JButton("Exit");
exit.addActionListener(this);
columnOfButtons.add(exit);
contentPane.add(columnOfButtons, BorderLayout.EAST);
setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(MyFrame::new);
}
private void makeRadioButton(JPanel p, String name, ButtonGroup group, ActionListener target) {
JRadioButton b = new JRadioButton(name);
group.add(b);
// add it to the specified JPanel and make the JPanel listen
p.add(b);
b.addActionListener(target);
}
public void actionPerformed(ActionEvent e) {
// Do the appropriate thing depending on which button is pressed.
// Use the getActionCommand() method to identify the button.
switch (e.getActionCommand()) {
case "Exit":
System.exit(0);
case "3":
drawingPanel.setPolygon(3);
break;
case "4":
drawingPanel.setPolygon(4);
break;
case "5":
drawingPanel.setPolygon(5);
break;
case "6":
drawingPanel.setPolygon(6);
break;
case "7":
drawingPanel.setPolygon(7);
break;
case "8":
drawingPanel.setPolygon(8);
break;
case "9":
drawingPanel.setPolygon(9);
break;
}
}
}
/*
* Developed by Neo on 26/11/18 15:37.
* Last modified 17/11/17 14:21.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel {
private int sides = 0;
void setPolygon(int sides) {
this.sides = sides;
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
// Make text and shapes appear smoother
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (sides == 0) sides = 5;
int[] x = new int[sides];
int[] y = new int[sides];
int width = getWidth();
int height = getHeight();
int r = (width > height ? height : width) / 3;
for (int i = 0; i < sides; i++) {
x[i] = (int) (width / 2 + r * Math.cos(2 * Math.PI / sides * i));
y[i] = (int) (height / 2 + r * Math.sin(2 * Math.PI / sides * i));
}
Shape shape = new Polygon(x, y, sides);
g2.draw(shape);
}
}
Week 11
/*
* Developed by Neo on 12/8/18 7:39 PM.
* Last modified 11/24/17 2:18 PM.
* Copyright (c) 2018. All rights reserved.
*/
/*
* JCalculator.java
* Class to produce a simple calculator in a window
*/
import javax.swing.*;
import java.awt.*;
public class JCalculator extends JFrame {
private JCalculator() {
super("JCalculator");
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
setSize(300, 400);
setLocationRelativeTo(null);
Container contentPane = this.getContentPane();
JTextArea display = new JTextArea(1, 20);
display.setEditable(false);
display.setFont(new Font("Courier", Font.BOLD, 40));
display.setPreferredSize(new Dimension(300, 100));
contentPane.add(display, BorderLayout.NORTH);
CalculatorButtons buttons = new CalculatorButtons(display);
contentPane.add(buttons, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame frm = new JCalculator();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
/*
* Developed by Neo on 12/8/18 7:48 PM.
* Last modified 11/24/17 2:18 PM.
* Copyright (c) 2018. All rights reserved.
*/
/*
* CalculatorButtons.java
* COM6516
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
class CalculatorButtons extends JPanel {
private static final String[] buttonLabels = {"7", "8", "9", "+", "4", "5", "6", "-",
"1", "2", "3", "*", "0", "=", "+/-", "/"};
private static final String[] opButtonLabels = {"+", "-", "*", "=", "+/-", "/"};
private String displayedValue = "0";
private String operand1;
private enum OP {PLUS, MINUS, MULT, DIV}
private OP operation = null;
CalculatorButtons(JTextArea display) {
setLayout(new GridLayout(4, 4));
// create buttons using factory method
for (int i = 0; i < 16; i++) {
makeButton(this, buttonLabels[i], display);
}
}
// factory method for making buttons
private void makeButton(JPanel panel, String name, JTextArea display) {
JButton button = new JButton(name);
panel.add(button);
// ADD CODE HERE TO CREATE NEW BUTTON ACTION, AND LINK BUTTON TO DISPLAY
button.addActionListener(new ButtonAction(name, display));
}
private class ButtonAction implements ActionListener {
private String theLabel;
private JTextArea theDisplay;
ButtonAction(String name, JTextArea display) {
theLabel = name;
theDisplay = display;
}
public void actionPerformed(ActionEvent actionEvent) {
if (Arrays.asList(opButtonLabels).contains(theLabel)) { //If pressed + - * / = +/-
if (theLabel.equals("=")) { //=
if (operation == null) { //No second value
//No need to update display
System.out.println("No-op " + displayedValue);
} else { //Calculate
int result = 0;
try {
switch (operation) {
case PLUS:
result = Math.addExact(Integer.parseInt(operand1), Integer.parseInt(displayedValue));
break;
case MINUS:
result = Math.subtractExact(Integer.parseInt(operand1), Integer.parseInt(displayedValue));
break;
case MULT:
result = Math.multiplyExact(Integer.parseInt(operand1), Integer.parseInt(displayedValue));
break;
case DIV:
//No need to check result if overflow
result = Integer.parseInt(operand1) / Integer.parseInt(displayedValue);
break;
}
System.out.println("Operands are " + operand1 + " and " + displayedValue);
System.out.println("Result = " + result);
displayedValue = Integer.toString(result);
theDisplay.setText(displayedValue);
} catch (ArithmeticException e) {
displayedValue = "0";
theDisplay.setText(e.getMessage());
}
operation = null;
}
} else if (theLabel.equals("+/-")) { //+/-
int temp = Integer.parseInt(displayedValue) * -1;
displayedValue = Integer.toString(temp);
theDisplay.setText(displayedValue);
} else { //+-*/
if (operation == null) { //Continue only null operation
switch (theLabel) {
case "+":
operation = OP.PLUS;
theDisplay.setText("+");
break;
case "-":
operation = OP.MINUS;
theDisplay.setText("-");
break;
case "*":
operation = OP.MULT;
theDisplay.setText("*");
break;
case "/":
operation = OP.DIV;
theDisplay.setText("/");
break;
}
operand1 = displayedValue;
displayedValue = "0";
}
}
} else { //If pressed number
if (displayedValue.equals("0"))
displayedValue = theLabel;
else {
if (displayedValue.length() < 8) //Cannot larger than 10M to prevent overflow
displayedValue += theLabel;
}
theDisplay.setText(displayedValue);
}
}
}
}
/*
* Developed by Neo on 12/8/18 7:48 PM.
* Last modified 11/24/17 2:18 PM.
* Copyright (c) 2018. All rights reserved.
*/
/*
* CalculatorButtons.java
* COM6516
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
class CalculatorButtons extends JPanel {
private static final String[] buttonLabels = {"7", "8", "9", "+", "4", "5", "6", "-",
"1", "2", "3", "*", "0", "=", ".", "/"};
private static final String[] opButtonLabels = {"+", "-", "*", "=", "/"};
private String displayedValue = "0";
private String operand1;
private enum OP {PLUS, MINUS, MULT, DIV}
private OP operation = null;
private boolean dotPressed = false;
CalculatorButtons(JTextArea display) {
setLayout(new GridLayout(4, 4));
// create buttons using factory method
for (int i = 0; i < 16; i++) {
makeButton(this, buttonLabels[i], display);
}
}
// factory method for making buttons
private void makeButton(JPanel panel, String name, JTextArea display) {
JButton button = new JButton(name);
panel.add(button);
// ADD CODE HERE TO CREATE NEW BUTTON ACTION, AND LINK BUTTON TO DISPLAY
button.addActionListener(new ButtonAction(name, display));
}
private class ButtonAction implements ActionListener {
private String theLabel;
private JTextArea theDisplay;
ButtonAction(String name, JTextArea display) {
theLabel = name;
theDisplay = display;
}
public void actionPerformed(ActionEvent actionEvent) {
if (Arrays.asList(opButtonLabels).contains(theLabel)) { //If pressed + - * / =
if (theLabel.equals("=")) { //=
if (operation == null) { //No second value
//No need to update display
System.out.println("No-op " + displayedValue);
} else { //Calculate
float result = 0;
try {
switch (operation) {
case PLUS:
result = Float.parseFloat(operand1) + Float.parseFloat(displayedValue);
break;
case MINUS:
result = Float.parseFloat(operand1) - Float.parseFloat(displayedValue);
break;
case MULT:
result = Float.parseFloat(operand1) * Float.parseFloat(displayedValue);
break;
case DIV:
result = Float.parseFloat(operand1) / Float.parseFloat(displayedValue);
break;
}
System.out.println("Operands are " + operand1 + " and " + displayedValue);
System.out.println("Result = " + result);
displayedValue = Float.toString(result);
theDisplay.setText(displayedValue);
} catch (ArithmeticException e) {
displayedValue = "0";
theDisplay.setText(e.getMessage());
}
dotPressed = true; //Because result must be float and have a "."
operation = null;
}
} else { //+-*/
if (operation == null) { //Continue only null operation
switch (theLabel) {
case "+":
operation = OP.PLUS;
theDisplay.setText("+");
break;
case "-":
operation = OP.MINUS;
theDisplay.setText("-");
break;
case "*":
operation = OP.MULT;
theDisplay.setText("*");
break;
case "/":
operation = OP.DIV;
theDisplay.setText("/");
break;
}
dotPressed = false;
operand1 = displayedValue;
displayedValue = "0";
}
}
} else { //If pressed number or "."
if (displayedValue.length() < 8) { //Prevent overflow
if (theLabel.equals(".")) { //Press "."
if (!dotPressed) {
displayedValue += theLabel;
}
dotPressed = true;
} else { //Press number
if (displayedValue.equals("0"))
displayedValue = theLabel;
else {
displayedValue += theLabel;
}
}
}
theDisplay.setText(displayedValue);
}
}
}
}
Assessed Lab 1
/*
* Developed by Neo on 05/11/18 11:12.
* Last modified 05/11/18 10:39.
* Copyright (c) 2018. All rights reserved.
*/
import sheffield.EasyReader;
/**
* This class can generate a walking plan for a old person
*/
public class GenerateWalkingPlan {
/**
* Program starts here.
*
* @param args command line arguments.
*/
public static void main(String[] args) {
// Ask for user's name and age for creating plan
EasyReader myReader = new EasyReader();
String name = myReader.readString("What is your name? ");
int age = myReader.readInt("Hello " + name + ", how old are you? ");
// Create a walk plan and print it
WalkingPlan newPlan = new WalkingPlan(name, age);
newPlan.generate();
newPlan.toPrint();
}
}
/*
* Developed by Neo on 05/11/18 11:10.
* Last modified 05/11/18 10:45.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.Random;
/**
* This is walk plan for old person
*/
class WalkingPlan {
/**
* This plan only contains 14 days plan
*/
private static final int PLAN_DAYS = 14;
/**
* We define more than 1500 meters as hard day
*/
private static final int HARD_MODE = 1500;
/**
* If two hard days in a row, we need change second day as relax day
*/
private static final int RELAX_MODE = 1000;
/**
* User's name
*/
private String name;
/**
* User's age
*/
private int age;
/**
* Every days plan
*/
private int[] plan;
/**
* The total meters of whole plan
*/
private int total;
/**
* Average meters of this plan
*/
private long average;
/**
* Constructor method for WalkingPlan
*
* @param name user's name
* @param age user's age
*/
WalkingPlan(String name, int age) {
this.name = name;
this.age = age;
// Initialize these variables
plan = new int[PLAN_DAYS];
total = 0;
average = 0;
}
/**
* This method will generate a waling plan
*/
void generate() {
Random random = new Random();
for (int i = 0; i < PLAN_DAYS; i++) {
plan[i] = 10 * (10 + random.nextInt(240)); // Generate a int in [100, 2500)
if (i > 0) {
if (plan[i] > HARD_MODE && plan[i - 1] > HARD_MODE)
plan[i] = RELAX_MODE;
}
total += plan[i];
}
average = Math.round((double) total / PLAN_DAYS);
}
/**
* This method will print walking plan
*/
void toPrint() {
System.out.println();
System.out.println(name + "(age=" + age + ") - this is your walking plan:");
for (int i = 0; i < PLAN_DAYS; i++) {
System.out.print("Day " + (i + 1) + ": walk " + plan[i] + "m");
if (plan[i] > HARD_MODE)
System.out.println(" <--- hard");
else
System.out.println();
}
System.out.println();
System.out.println("Total number of meters walked = " + total);
System.out.println("Average number of meters walked per day = " + average);
}
}
Assessed Lab 2
/*
* Developed by Neo on 12/10/18 5:17 PM.
* Last modified 12/10/18 11:24 AM.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
/**
* This class will show the Scorer GUI.
*/
public class ScorerGUI {
/**
* Program starts here.
*
* @param args command line arguments
*/
public static void main(String[] args) {
JFrame f = new ScoringFrame();
//Set the frame visible
f.setVisible(true);
}
}
/*
* Developed by Neo on 12/10/18 5:17 PM.
* Last modified 12/10/18 11:24 AM.
* Copyright (c) 2018. All rights reserved.
*/
/**
* This class is a score record.
*/
class Scorer {
/**
* Scorer's name.
*/
private String name;
/**
* Scorer's score.
*/
private int score;
/**
* Constructor method of Scorer.
*
* @param name Scorer's name.
* @param score Scorer's score.
*/
Scorer(String name, int score) {
this.name = name;
this.score = score;
}
/**
* Getter method of name.
*
* @return Scorer's name.
*/
String getName() {
return name;
}
/**
* Getter method of score.
*
* @return Scorer's score.
*/
int getScore() {
return score;
}
}
/*
* Developed by Neo on 12/10/18 5:17 PM.
* Last modified 12/10/18 11:38 AM.
* Copyright (c) 2018. All rights reserved.
*/
import java.util.Comparator;
/**
* This comparator will compare two scorer's score.
*/
public class ScoreComparator implements Comparator<Scorer> {
/**
* Compare to scorer's score.
*
* @param a First scorer.
* @param b Second scorer.
* @return The difference of two scorers' score.
*/
@Override
public int compare(Scorer a, Scorer b) {
return b.getScore() - a.getScore();
}
}
/*
* Developed by Neo on 12/10/18 5:17 PM.
* Last modified 12/10/18 11:47 AM.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Set;
import java.util.TreeSet;
/**
* This class will create a score frame.
*/
class ScoringFrame extends JFrame implements ActionListener {
/**
* "Enter Score" button.
*/
private JButton enterButton;
/**
* "Quit" button.
*/
private JButton quitButton;
/**
* Name text field.
*/
private JTextField nameText;
/**
* Score text field.
*/
private JTextField scoreText;
/**
* This label show the highest score.
*/
private JLabel highestLabel;
/**
* This set stores all scores.
*/
private Set<Scorer> scorerList;
/**
* Constructor method of ScoringFrame.
*/
ScoringFrame() {
//Set title
super("Competition score GUI");
//Set window's size
setSize(960, 270);
//Set window's position in the centre of screen
this.setLocationRelativeTo(null);
//Set this windows can only be closed by quit button
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//Components of this frame
JLabel nameLabel = new JLabel("Name: ");
nameText = new JTextField(20);
JLabel scoreLabel = new JLabel("Score: ");
scoreText = new JTextField(5);
enterButton = new JButton("Enter Score");
enterButton.addActionListener(this);
//Top
JPanel topPanel = new JPanel();
topPanel.add(nameLabel);
topPanel.add(nameText);
topPanel.add(scoreLabel);
topPanel.add(scoreText);
topPanel.add(enterButton);
this.add(topPanel, BorderLayout.NORTH);
//Centre
highestLabel = new JLabel("Top scorer is", JLabel.CENTER);
highestLabel.setFont(new Font("Arial", Font.PLAIN, 36));
highestLabel.setForeground(Color.RED);
this.add(highestLabel, BorderLayout.CENTER);
//Bottom
JPanel bottomPanel = new JPanel();
quitButton = new JButton("Quit");
quitButton.addActionListener(this);
bottomPanel.add(quitButton);
this.add(bottomPanel, BorderLayout.SOUTH);
//Use comparator to sort this set
scorerList = new TreeSet<>(new ScoreComparator());
}
/**
* This method execute every time when action happens.
*
* @param e Action event.
*/
@Override
public void actionPerformed(ActionEvent e) {
//If clicked "Enter Score" button
if (e.getSource().equals(enterButton)) {
//If user did not input correct data, popup a message
if (nameText.getText().equals("") || scoreText.getText().equals("")) {
JLabel promptLabel = new JLabel("Please input correct data!", JLabel.CENTER);
JOptionPane.showMessageDialog(null, promptLabel, "Oops!", JOptionPane.ERROR_MESSAGE);
return;
}
try {
int tempScore = Integer.parseInt(scoreText.getText());
//Check if user input correct number
if (tempScore < 0 || tempScore >= 100)
throw new NumberFormatException();
//No problem, create new scorer, and store it
Scorer newScorer = new Scorer(nameText.getText(), tempScore);
scorerList.add(newScorer);
//No need to check if has next
Scorer highestScorer = scorerList.iterator().next();
//Then set the text of high label
highestLabel.setText("Top scorer is " + highestScorer.getName() + " with " + highestScorer.getScore() + "points");
} catch (NumberFormatException ex) { //If user did not input correct number
JLabel promptLabel = new JLabel("Please input correct data!", JLabel.CENTER);
JOptionPane.showMessageDialog(null, promptLabel, "Oops!", JOptionPane.ERROR_MESSAGE);
}
} else if (e.getSource().equals(quitButton)) { //If clicked "Quit" button
//Print all scorer's name and score.
for (Scorer s : scorerList)
System.out.println("Name = " + s.getName() + ", Score = " + s.getScore());
//At last, goodbye my friend!
System.exit(0);
}
}
}