Skip to content

Commit 1d44670

Browse files
committed
Chapter 11 complete
1 parent f5e9b2e commit 1d44670

9 files changed

+327
-2
lines changed

src/ch_11/Exercise11_11.java

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.Scanner;
5+
6+
/**
7+
* 11.11 (Sort ArrayList) Write the following method that sorts an ArrayList of
8+
* numbers:
9+
* public static void sort(ArrayList<Integer> list)
10+
* <p>
11+
* Write a test program that prompts the user to enter 5 numbers, stores them in an
12+
* array list, and displays them in increasing order.
13+
*/
14+
public class Exercise11_11 {
15+
public static void main(String[] args) {
16+
Scanner in = new Scanner(System.in);
17+
System.out.print("Enter five integers: ");
18+
ArrayList<Integer> list = new ArrayList<>();
19+
for (int i = 0; i < 5; i++) {
20+
list.add(in.nextInt());
21+
}
22+
23+
sort(list);
24+
System.out.print("The numbers in increasing order: ");
25+
System.out.print("\n" + list.toString());
26+
in.close();
27+
}
28+
29+
public static void sort(ArrayList<Integer> list) {
30+
boolean loop = true;
31+
while (loop) {
32+
loop = false; //Reset to check if can remain false
33+
for (int n = 0; n < list.size(); n++) {
34+
for (int i = n; i < list.size(); i++) {
35+
if (!(i == n)) {
36+
if (list.get(n) > list.get(i)) {
37+
loop = true; // Not finished sorting..
38+
swapElements(list, n, i);
39+
}
40+
41+
}
42+
}
43+
}
44+
45+
}
46+
47+
48+
}
49+
50+
static void swapElements(ArrayList<Integer> list, int idx1, int idx2) {
51+
Integer temp = list.get(idx1);
52+
list.set(idx1, list.get(idx2));
53+
list.set(idx2, temp);
54+
}
55+
}

src/ch_11/Exercise11_12.java

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.ListIterator;
5+
import java.util.Scanner;
6+
7+
/**
8+
* 11.12 (Sum ArrayList) Write the following method that returns the sum of all numbers in an ArrayList:
9+
* public static double sum(ArrayList<Double> list)
10+
* <p>
11+
* Write a test program that prompts the user to enter 5 numbers, stores them in an
12+
* array list, and displays their sum.
13+
*/
14+
public class Exercise11_12 {
15+
public static void main(String[] args) {
16+
ArrayList<Double> list = new ArrayList<>();
17+
18+
Scanner in = new Scanner(System.in);
19+
System.out.print("Enter 5 numbers: ");
20+
for (int i = 0; i < 5; i++) {
21+
list.add(in.nextDouble());
22+
}
23+
System.out.println("Sum = " + sum(list));
24+
25+
in.close();
26+
}
27+
28+
public static double sum(ArrayList<Double> list) {
29+
double sum = 0;
30+
ListIterator<Double> iterator = list.listIterator();
31+
while (iterator.hasNext()) {
32+
sum += iterator.next();
33+
}
34+
return sum;
35+
}
36+
37+
}

src/ch_11/Exercise11_13.java

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public static void main(String[] args) {
3131

3232
System.out.print("The distinct integers are ");
3333
for (Integer integer : testList) {
34-
3534
System.out.print(integer + " ");
3635
}
3736
input.close();

src/ch_11/Exercise11_14.java

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.Scanner;
6+
7+
/**
8+
* 11.14 (Combine two lists) Write a method that returns the union of two array lists of
9+
* integers using the following header:
10+
* public static ArrayList<Integer> union(ArrayList<Integer> list1, ArrayList<Integer> list2)
11+
* <p>
12+
* For example, the union of two array lists {2, 3, 1, 5} and {3, 4, 6} is
13+
* {2, 3, 1, 5, 3, 4, 6}.
14+
* <p>
15+
* Write a test program that prompts the user to enter two lists,
16+
* each with five integers, and displays their union. The numbers are separated by
17+
* exactly one space in the output. Here is a sample run:
18+
* Enter five integers for list1: 3 5 45 4 3
19+
* Enter five integers for list2: 33 51 5 4 13
20+
* The combined list is 3 5 45 4 3 33 51 5 4 13
21+
*/
22+
public class Exercise11_14 {
23+
public static void main(String[] args) {
24+
Scanner in = new Scanner(System.in);
25+
ArrayList<Integer> one = new ArrayList<>();
26+
ArrayList<Integer> two = new ArrayList<>();
27+
System.out.print("Enter 5 integers for list1: ");
28+
for (int i = 0; i < 5; i++) {
29+
one.add(in.nextInt());
30+
}
31+
System.out.print("Enter 5 integers for list2: ");
32+
for (int i = 0; i < 5; i++) {
33+
two.add(in.nextInt());
34+
}
35+
36+
37+
System.out.println("The combined list is " + union(one, two).toString());
38+
in.close();
39+
}
40+
41+
public static ArrayList<Integer> union(ArrayList<Integer> list1, ArrayList<Integer> list2) {
42+
list1.addAll(list2);
43+
return list1;
44+
45+
}
46+
}

src/ch_11/Exercise11_15.java

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.Scanner;
5+
6+
/**
7+
* 11.15 (Area of a convex polygon) A polygon is convex if it contains any line segments
8+
* that connects two points of the polygon.
9+
* <p>
10+
* Write a program that prompts the user to enter the number of points in a convex polygon, then enter the points
11+
* clockwise,
12+
* and display the area of the polygon.
13+
* <p>
14+
* Here is a sample run of the program:
15+
* Enter the number of the points: 7
16+
* Enter the coordinates of the points:
17+
* -12 0 -8.5 10 0 11.4 5.5 7.8 6 -5.5 0 -7 -3.5 -3.5
18+
* The total area is 250.075
19+
*/
20+
public class Exercise11_15 {
21+
public static void main(String[] args) {
22+
Scanner in = new Scanner(System.in);
23+
24+
System.out.print("Enter the number of points: ");
25+
int numPoints = in.nextInt();
26+
27+
ArrayList<double[]> pts = new ArrayList<>();
28+
29+
System.out.print("Enter the coordinates of the points in the convex polygon: ");
30+
31+
for (int i = 0; i < numPoints; i++) {
32+
double[] pt = new double[2];
33+
for (int xy = 0; xy < 2; xy++) {
34+
pt[xy] = in.nextDouble();
35+
}
36+
pts.add(pt);
37+
}
38+
39+
System.out.print("The area of the convex polygon is ");
40+
System.out.println(getAreaConvexPolygon(pts) + "");
41+
42+
in.close();
43+
44+
}
45+
46+
static double getAreaConvexPolygon(ArrayList<double[]> pts) {
47+
double[] lastPoint = pts.get(pts.size() - 1);
48+
double[] firstPoint = pts.get(0);
49+
double operand1 = lastPoint[0] * firstPoint[1]; // xn * y1
50+
for (int i = 0; i < pts.size() - 1; i++) {
51+
double[] pt = pts.get(i);
52+
double[] nextPt = pts.get(i + 1);
53+
operand1 += pt[0] * nextPt[1]; // x1 * y2 + x2 * y3 + x(n) * y(n+1) + {x(n) * y1}
54+
}
55+
double operand2 = lastPoint[1] * firstPoint[0]; // yn * x1
56+
for (int i = 0; i < pts.size() - 1; i++) {
57+
double[] pt = pts.get(i);
58+
double[] nextPt = pts.get(i + 1);
59+
operand2 += pt[1] * nextPt[0]; // y1 * x2 + y2 * x3 + y(n) + x(n+1) + {y(n) * x1}
60+
61+
}
62+
return Math.abs((operand1 - operand2) * 0.5);
63+
64+
}
65+
66+
}

src/ch_11/Exercise11_16.java

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.Scanner;
5+
6+
/**
7+
* *11.16 (Addition quiz) Rewrite Listing 5.1 RepeatAdditionQuiz.java to alert the user
8+
* if an answer is entered again. Hint: use an array list to store answers. Here is a
9+
* sample run:
10+
* What is 5 + 9? 12
11+
* Wrong answer. Try again. What is 5 + 9? 34
12+
* Wrong answer. Try again. What is 5 + 9? 12
13+
* You already entered 12
14+
* Wrong answer. Try again. What is 5 + 9? 14
15+
* You got it!
16+
*/
17+
public class Exercise11_16 {
18+
public static void main(String[] args) {
19+
ArrayList<Integer> guesses = new ArrayList<>();
20+
21+
Scanner input = new Scanner(System.in);
22+
23+
int number1 = (int) (Math.random() * 10);
24+
int number2 = (int) (Math.random() * 10);
25+
26+
System.out.print("What is " + number1 + " + " + number2 + "? ");
27+
int answer = input.nextInt();
28+
29+
while (answer != number1 + number2) {
30+
31+
if (guesses.contains(answer)) {
32+
System.out.println("You've already entered " + answer);
33+
System.out.print("Try again. What is " + number1 + " + " + number2 + "? ");
34+
answer = input.nextInt();
35+
36+
} else {
37+
guesses.add(answer);
38+
System.out.print("Wrong answer. Try again. What is " + number1 + " + " + number2 + "? ");
39+
answer = input.nextInt();
40+
}
41+
42+
}
43+
44+
input.close();
45+
System.out.println("You got it!");
46+
}
47+
48+
}

src/ch_11/Exercise11_17.java

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package ch_11;
2+
3+
import java.util.ArrayList;
4+
import java.util.Scanner;
5+
6+
/**
7+
* *11.17 (Algebra: perfect square) Write a program that prompts
8+
* the user to enter an integer m and find the smallest integer n such that m * n is a perfect square. (Hint:
9+
* Store all smallest factors of m into an array list. n is the product of the factors that
10+
* appear an odd number of times in the array list.
11+
* <p>
12+
* For example, consider m = 90, store the factors 2, 3, 3, 5 in an array list. 2 and 5 appear an odd number of times
13+
* in the array list. So, n is 10.)
14+
* <p>
15+
* Here are sample runs:
16+
* Enter an integer m: 1500
17+
* The smallest number n for m * n to be a perfect square is 15
18+
* m * n is 22500
19+
* <p>
20+
* <p>
21+
* Enter an integer m: 63
22+
* The smallest number n for m * n to be a perfect square is 7
23+
* m * n is 441
24+
*/
25+
public class Exercise11_17 {
26+
public static void main(String[] args) {
27+
Scanner in = new Scanner(System.in);
28+
System.out.print("Enter an integer: ");
29+
int m = in.nextInt();
30+
31+
int n = findN(findSmallestFactors(m));
32+
System.out.println("The smallest number n for m * n to be a perfect square is " + n);
33+
System.out.println("m * n is " + m * n);
34+
35+
}
36+
37+
static ArrayList<Integer> findSmallestFactors(int m) {
38+
39+
ArrayList<Integer> smallFactors = new ArrayList<>();
40+
41+
for (int f = 2; m != 1; f++) {
42+
if (m % f == 0) {
43+
smallFactors.add(f);
44+
m /= f;
45+
f = 1; // Reset the test factor
46+
}
47+
}
48+
return smallFactors;
49+
}
50+
51+
static Integer findN(ArrayList<Integer> factors) {
52+
ArrayList<Integer> oddCounts = new ArrayList<>();
53+
for (int i = 0; i < factors.size(); i++) {
54+
int num = factors.get(i);
55+
int count = 0;
56+
for (Integer integer : factors) {
57+
if (integer == num) {
58+
count++;
59+
}
60+
}
61+
if (count % 2 != 0 && !oddCounts.contains(num)) {
62+
oddCounts.add(num);
63+
}
64+
65+
}
66+
67+
Integer result = 1;
68+
for (Integer oddCount : oddCounts) {
69+
result *= oddCount;
70+
}
71+
return result;
72+
}
73+
74+
}

src/ch_11/area_convex_polygon.gif

4.54 KB
Loading

src/ch_11/exercise11_02/Exercise11_02.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public static void main(String[] args) {
152152
Person person = new Person();
153153
person.setName("Garry Barryman");
154154
Student student = new Student(Student.SENIOR);
155-
student.setName("Jingle Jam");
155+
student.setName("Jingle PB&J");
156156
Employee employee = new Employee("Delray Beach,FL", 45_750.00, new MyDate());
157157
employee.setName("Sarah Stodenbyer");
158158
Faculty faculty = new Faculty(new double[]{9.0, 5.0}, 5);

0 commit comments

Comments
 (0)