Skip to content

Commit 502383d

Browse files
committed
to Exercise 12.4
1 parent e355c7c commit 502383d

File tree

7 files changed

+286
-376
lines changed

7 files changed

+286
-376
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 184 additions & 343 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ch11/ForDebuggingCh11.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,28 @@ private static int divide(int number, int divider){
1313
}
1414

1515
private static int findGCD(int numerator, int denominator){
16-
int rest = 1;
17-
while(rest != 0){
18-
rest = divide(numerator, denominator);
19-
numerator = denominator;
20-
denominator = rest;
16+
if(numerator - denominator == 0){
17+
return numerator;
18+
} else if(numerator - denominator > 0){
19+
return findGCD(numerator-denominator, denominator);
20+
} else{
21+
return findGCD(numerator,denominator-numerator);
2122
}
22-
return denominator;
23+
}
24+
25+
public static Rational reduce(Rational number){
26+
Rational result = new Rational(number.getNumerator(),number.getDenominator());
27+
int gcd = findGCD(number.numerator, number.denominator);
28+
result.setNumerator(result.getNumerator()/gcd);
29+
result.setDenominator(result.getDenominator()/gcd);
30+
return result;
2331
}
2432

2533
public static void main(String[] args){
26-
int x = findGCD(500,4000);
27-
System.out.println("result = " + x);
34+
Rational r = new Rational(1071,462);
35+
Rational result = reduce(r);
36+
System.out.println("Result: " + result);
37+
System.out.println("r: " + r);
38+
System.exit(0);
2839
}
2940
}

ch11/Rational.java

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -78,40 +78,39 @@ public double toDouble(Rational that){
7878
return that.numerator / tmp;
7979
}
8080

81-
/*
82-
* Returns rest from dividing 2 numbers when this rest is smaller than divider
83-
*/
84-
private static int divide(int number, int divider){
85-
int result = number;
86-
int i = 1;
87-
while(result > divider){
88-
result = number % (i*divider);
89-
}
90-
return result;
91-
}
92-
9381
/*
9482
* Returns greatest common divisor with Euclidean algorhitm
9583
*/
9684
private static int findGCD(int numerator, int denominator){
97-
int rest = 1;
98-
while(rest != 0){
99-
rest = divide(numerator, denominator);
100-
numerator = denominator;
101-
denominator = rest;
85+
if(numerator - denominator == 0){
86+
return numerator;
87+
} else if(numerator - denominator > 0){
88+
return findGCD(numerator-denominator, denominator);
89+
} else{
90+
return findGCD(numerator,denominator-numerator);
10291
}
103-
return denominator;
10492
}
10593

10694
/*
10795
* Reduces rational number to its lowest term
10896
*/
109-
public Rational reduce(Rational number){
110-
Rational result = new Rational();
97+
public static Rational reduce(Rational number){
98+
Rational result = new Rational(number.getNumerator(),number.getDenominator());
11199
int gcd = findGCD(number.numerator, number.denominator);
112100
result.setNumerator(result.getNumerator()/gcd);
113101
result.setDenominator(result.getDenominator()/gcd);
114102
return result;
115103
}
116104

105+
/*
106+
* Adds input rational number to this object
107+
*/
108+
public void add(Rational that){
109+
this.numerator += that.getNumerator();
110+
this.denominator += that.getDenominator();
111+
Rational tmp = reduce(this);
112+
this.numerator = tmp.getNumerator();
113+
this.denominator = tmp.getDenominator();
114+
}
115+
117116
}

ch11/RationalClient.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
*/
44
public class RationalClient {
55
public static void main(String[] args){
6-
Rational number = new Rational(3,13);
6+
Rational number = new Rational(767,1900);
7+
Rational toAdd = new Rational(100,89);
78
/*
89
number.setDenominator(2);
910
number.setNumerator(9);
1011
*/
11-
/////
12+
/*
1213
number.printRational(number);
13-
////
1414
String s = number.toString();
1515
System.out.println(s);
1616
@@ -24,6 +24,8 @@ public static void main(String[] args){
2424
System.out.println("After swap: " + s);
2525
2626
double result = number.toDouble(number);
27-
System.out.println("Result = " + result);
27+
*/
28+
number.add(toAdd);
29+
System.out.println("Result: " + number);
2830
}
2931
}

ch12/Card.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ public int compareTo(Card that) {
3434
if (this.suit > that.suit) {
3535
return 1;
3636
}
37+
if(this.rank == 1){
38+
return 1;
39+
}
40+
if(that.rank == 1){
41+
return -1;
42+
}
3743
if (this.rank < that.rank) {
3844
return -1;
3945
}

ch12/Search.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,38 @@ public static int binarySearch(Card[] cards, Card target,
8484
}
8585
}
8686

87+
/*
88+
* Returns histogram of deck
89+
*/
90+
public static int[] suitHist(Card[] suit){
91+
int[] histogram = new int[52];
92+
for(int i=0; i<histogram.length; i++){
93+
histogram[i] = 0;
94+
}
95+
for(int i=0; i<suit.length; i++){
96+
histogram[suit[i].position()]++;
97+
}
98+
return histogram;
99+
}
100+
101+
/*
102+
* Returns TRUE when there are 5 cards of the same suite in input array
103+
*/
104+
public static boolean hasFlush(Card[] suite){
105+
int counter;
106+
int[] histogram = suitHist(suite);
107+
for(int i=0; i<4; i++){
108+
counter = 0;
109+
for(int j=0; j<13; j++){
110+
counter += histogram[i*13+j];
111+
}
112+
if(counter >= 5){
113+
return true;
114+
}
115+
}
116+
return false;
117+
}
118+
87119
/**
88120
* Demonstrates how to call the search methods.
89121
*/
@@ -107,6 +139,25 @@ public static void main(String[] args) {
107139
System.out.println("Recursive binary search");
108140
System.out.println(binarySearch(cards, jack, 0, 51));
109141
System.out.println();
142+
143+
Card[] suit = new Card[8];
144+
suit[0] = new Card(2,3);
145+
suit[1] = new Card(3,2);
146+
suit[2] = new Card(4,0);
147+
suit[3] = new Card(1,1);
148+
suit[4] = new Card(2,1);
149+
suit[5] = new Card(3,1);
150+
suit[6] = new Card(4,1);
151+
suit[7] = new Card(1,3);
152+
153+
154+
int[] hist = suitHist(suit);
155+
156+
for(int i=0; i<cards.length; i++){
157+
System.out.print(cards[i].toString() + " occurs " + hist[i] + " times.\n");
158+
}
159+
160+
System.out.print("\nHas Flush? " + hasFlush(suit));
110161
}
111162

112163
}

0 commit comments

Comments
 (0)