辅导案例-SOFT2201/COMP9201
SOFT2201/COMP9201 Tutorial 1
Java Revision
Introduction
You are going to be assigned to a breakout room on zoom by your tutor. Introduce yourself to the rest
of the class, what degree you are in, why you are interested in programming and what you did over
the break. Make sure you know your tutor’s name by the end of the tutorial.
Edstem
We use EdStem for our forum, challenges and assignments. please get familiar with Edstem as it will
be used heavily through out the semester and is typically the place where announcements are made.
Please make sure you can login (Canvas→ Ed on the left side menu) and reply to the welcome post.
If you cannot login, please notify your tutor so they can address this issue.
Question 1: Swapping Values
Giving the following code segments, discuss with your group members what the output will be, can
you explain why or why not certain values are not swapped?
Case 1:
public class Program {
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println(a);
System.out.println(b);
1
SOFT2201/COMP9201 Java Revision
}
}
Case 2:
public class Program {
public static void swap(int[] array) {
int temp = array[0];
array[0] = array[1];
array[1] = temp;
}
public static void main(String[] args) {
int[] arr = { 50, 100};
swap(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
Case 3:
class Box {
public int value;
public Box(int v) { value = v; }
}
public class Program {
public static void swap(Box a, Box b) {
int temp = a.value;
a.value = b.value;
b.value = temp;
}
public static void main(String[] args) {
Box x = new Box(500);
Box y = new Box(600);
swap(x, y);
System.out.println(x.value);
System.out.println(y.value);
}
}
Software Design and Construction 1 Page 2 of 13
SOFT2201/COMP9201 Java Revision
Question 2: Reverse
Write a function that reverses an integer array,
I would encourage you write a reverse function that is in place. By this we mean that you do not copy
the contents into another array and only use the array given.
public class Reverse {
public static void reverse(int array[]) {
//Your code here, must perform an inplace reverse
}
}
Example
//If you have an array that is:
{ 1, 2, 3, 4, 5, 6, 7, 8 }
//Output
{ 8, 7, 6, 5, 4, 3, 2, 1 }
Question 3: Comparing and sorting
Implement a program that will sort a collection of Strings in reverse order. Do not reverse the list but
create a Comparator to order the collection.
import java.util.List;
import java.util.Collections;
public class App {
public static void main(String[] args) {
List strings = Arrays.asList(new String[] {
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven"
});
Collections.sort(strings, /* Your comparator here */);
Software Design and Construction 1 Page 3 of 13
SOFT2201/COMP9201 Java Revision
for(String s : strings) {
System.out.println(s);
}
}
}
Your program should output the following:
Two
Three
Six
Seven
One
Four
Five
Question 4: Union
You are tasked with writing a method that will compute the union between two arrays. Using methods
from the previous exercises (countDuplicates, contains and count). You will need to detect overlap
between the two sets and ensure you are not including an element that appears in both sets more than
once.
You have been provided a scaffold for the above problem
public class ArrayUnion {
public static int[] union(int[] a, int[] b) {
return null;
}
public static void main(String[] args) {
}
}
You will need to check if there is a duplicate element in both sets as you should only return one
element, not both.
Your method must return null if either array is null.
Example 1
int[] x = {3, 2, 7};
int[] y = {3, 8, 9};
Software Design and Construction 1 Page 4 of 13
SOFT2201/COMP9201 Java Revision
int[] result = union(x, y);
//{2, 3, 7, 8, 9}, it is not necessary to sort the array
Example 2
int[] x = {2, 2, 7};
int[] y = {1, 9};
int[] result = union(x, y);
//{1, 2, 7, 9}, it is not necessary to sort the array
Example 3
int[] x = null;
int[] y = {6, 8, 9};
int[] result = union(x, y);
//nulldmesg
Gradle
We recommended you get access to sdkman to download a package manager for java 11 and gradle.
Through out the semester you are expected to develop your applications over the semester using gradle
to help link to dependencies, test your code and provide a release configuration for your application.
You can also find an announcement on Ed with more details about gradle installation.
Question 5: Using gradle
You are tasked with creating a simple gradle project so you are familiar with how the build system
operates.
Firstly, start by creating a project folder using terminal.
$ mkdir my_project
$ cd my_project
To initialise a gradle project, use the init sub-command to get started.
$ gradle init
Once gradle init has been called, you will be prompted with the type of project you want to
create. We want to create a java-application with groovy as the build tool language and
junit as our test framework.
Software Design and Construction 1 Page 5 of 13
SOFT2201/COMP9201 Java Revision
$ gradle init
Select type of project to generate:
1: basic
2: cpp-application
3: cpp-library
4: groovy-application
5: groovy-library
6: java-application
7: java-library
8: kotlin-application
9: kotlin-library
10: scala-library
Enter selection (default: basic) [1..10] 6
Select build script DSL:
1: groovy
2: kotlin
Enter selection (default: groovy) [1..2] 1
Select test framework:
1: junit
2: testng
3: spock
Enter selection (default: junit) [1..3] 1
Project name (default: hello):
Source package (default: hello):
BUILD SUCCESSFUL in 16s
2 actionable tasks: 2 executed
Once your project has been set up, you can readily build your project using the command gradle
build and run your program using gradle run.
Software Design and Construction 1 Page 6 of 13
SOFT2201/COMP9201 Java Revision
Java Language and IDE
During the semester you will be required to implement your assignments using the Java Programming
Language. You will be expected to use an Integrated Development Environment (IDE) to assist you
with developing software over the semester.
Although an IDE is not required, you are encouraged to use IntelliJ IDEA from JetBrains. Tutorials
will contain excerpts from the IntelliJ IDEA from JetBrains to help linking to software libraries.
IntelliJ utilises gradle as its build system
Question 6: IntelliJ and Gradle
(a) Step1: Welcome Page (b) Step2: Create Project
Assuming you have installed IntelliJ, we will set up a simple project for the next exercise. Firstly
create a new project from the initial prompt. Once presented with the Step 2 window, select Gradle
Software Design and Construction 1 Page 7 of 13
SOFT2201/COMP9201 Java Revision
(a) Step3: Select Gradle
(b) Step4: Enter Artifactid
Ensure Java is enabled under Additional Libraries and Frameworks. Afterwards, we will need to
specify an artifact id, this can be the same as the java package name, in this case we will call it
my.hello.
Software Design and Construction 1 Page 8 of 13
SOFT2201/COMP9201 Java Revision
(a) Step5: Gradle Configuration
(b) Step6: Src Code
Afterwards, we will need to specify what we will want to import and a gradle configuration, assuming
you have installed gradle correctly, you can leave the settings as they are. At this point you will have
created a gradle project within IntelliJ, depending on the version of gradle you are using, you may
already be given a simple Hello, World example, if not, it might be best to ensure that your
project is configured correctly. You will need to right click on java and create a Package, in this
case we want to create the parent package my and the sub-package hello, where your App class
will reside.
Software Design and Construction 1 Page 9 of 13
SOFT2201/COMP9201 Java Revision
Afterwards, you can execute your program, if the run option is immediately present, you can utilise
this, if not, you will need to use Run....
This option will present you with an option to specify the class to execute.
Software Design and Construction 1 Page 10 of 13
SOFT2201/COMP9201 Java Revision
Question 7: Trains, Cargo and Stations
TrainLink has decided to develop a cargo freighting service between regional centres of Australia. A
cargo train will deliver cargo from each station on its itinerary. An itinerary contains a list of stations
to visit, with the train starting at the first station and ending at the last.
Write Java code to implement the functionalities as required above and use the following unit test to
for the basic test cases check your solution.
import java.util.ArrayList;
import java.util.Arrays;
package soft2201.tutorial1.test;
public class FreightServiceTest {
private Train train;
@Before
public void setup() {
ArrayList stations = new ArrayList<>(Arrays.asList(
new Station("Moree", new ArrayList(
Arrays.asList(
new Cargo("Barley"),
new Cargo("Avocados"),
new Cargo("Truck Engine"),
new Cargo("Drone")
)
)),
new Station("Gunnedah", new ArrayList(
Arrays.asList(
new Cargo("DVDs"),
new Cargo("Textbooks"),
new Cargo("Soybean")
)
)),
new Station("Murrundai", new ArrayList()),
new Station("Scone", new ArrayList(
Arrays.asList(
new Cargo("Oats"),
new Cargo("Barley")
)
))
)
);
Itinerary itinerary = new Itinerary(stations);
train = new Train("Big Blue", itinerary,
Software Design and Construction 1 Page 11 of 13
SOFT2201/COMP9201 Java Revision
new ArrayList(
Arrays.asList(
new Deliverable(new Cargo("Steel", "Moree")),
new Deliverable(new Cargo("Copper", "Murrundai")),
new Deliverable(new Cargo("Coal", "Scone"))
)
)
);
}
@Test
public void testStationConstruction() {
Station station = new Station("Newcastle", new ArrayList(
Arrays.asList(
new Cargo("Wine")
)
));
assertNotNull(station.cargo());
assertNotNull(station.cargo().get(0));
assertEquals("Wine", station.cargo().get(0).getName());
}
@Test
public void testItineraryConstruction() {
Itinerary itinerary = new Itinerary(new ArrayList(
Arrays.asList(
new Station("Newcastle", new ArrayList()),
new Station("Wyong", new ArrayList())
)
));
assertEquals("Newcastle", itinerary.stations().get(0).getName());
assertEquals("Wyong", itinerary.stations().get(1).getName());
}
@Test
public void testStationAccess() {
assertEquals(4, train.itinerary().size());
assertNotNull(train.itinerary().getStation(0));
assertNotNull(train.itinerary().getStation(1));
assertNotNull(train.itinerary().getStation(2));
assertNotNull(train.itinerary().getStation(3));
}
@Test
public void testItineraryAccess() {
assertNotNull(train.itinerary().getStation(0));
assertNotNull(train.itinerary().getStation(1));
Software Design and Construction 1 Page 12 of 13
SOFT2201/COMP9201 Java Revision
assertNotNull(train.itinerary().getStation(2));
assertNotNull(train.itinerary().getStation(3));
}
@Test
public void testStartingStationVisit() {
assertNotNull(train.getCurrentStation());
assertEquals(train.getCurrentStation().getName(), "Moree");
}
@Test
public void testSimpleDelivery() {
Station moree = train.getCurrentStation();
assertEquals("Moree", train.getCurrentStation().getName());
assertEquals(3, trian.deliverables().size());
assertEquals("Steel", train.deliverables().get(0).getName());
assertEquals("Copper", train.deliverables().get(1).getName());
assertEquals("Coal", train.deliverables().get(2).getName());
assertEquals(4, moree.cargo().size());
train.deliver();
assertEquals(2, train.deliverables().size());
assertEquals("Copper", train.deliverables().get(0).getName());
assertEquals("Coal", train.deliverables().get(1).getName());
assertEquals(5, moree.cargo().size());
}
}
Once you have imported the test into your project, run gradle test to run your unit tests.
• What functionality is currently not being tested?
• Have all code paths been executed? Suggest what components have not been tested and what
branches have been executed
• What kind of cases are the current batch of test cases not considering?
• Implement a few more test cases to increase your code coverage and to ensure as much func-
tionality is tested
Software Design and Construction 1 Page 13 of 13
51作业君 51作业君

Email:51zuoyejun

@gmail.com

添加客服微信: ITCSdaixie