Difference between revisions of "PowersOf2Iterable"

From CSE231 Wiki
Jump to navigation Jump to search
m (Adding note on how to create anonymous inner class)
 
(10 intermediate revisions by 2 users not shown)
Line 22: Line 22:
 
interface [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator<T>]
 
interface [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator<T>]
  
<youtube>4ycpqdJ4yb4</youtube>
+
{{CollapsibleYouTube|Implementing Iterable and Iterator|<youtube>4ycpqdJ4yb4</youtube>}}
  
 
=Mistakes To Avoid=
 
=Mistakes To Avoid=
Line 29: Line 29:
 
{{warning | Do NOT confuse [https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html Iterable<T>] from [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator<T>]}}
 
{{warning | Do NOT confuse [https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html Iterable<T>] from [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator<T>]}}
  
=How To Use=
+
=Client=
<nowiki>for(int v : new PowersOfTwoLessThan(71)) {
+
{{Client|PowersOfTwoLessThanClient|iteration.powersoftwo.client|main}}
    System.out.println(v);
 
}</nowiki>
 
  
should produce the output:
+
{{CollapsibleCode|PowersOfTwoLessThanClient|
 +
<syntaxhighlight lang="java">
 +
for (int powerOf2 : new PowersOfTwoLessThan(231)) {
 +
System.out.println(powerOf2);
 +
}
 +
</syntaxhighlight>}}
  
<nowiki>1
+
{{CollapsibleConsole|PowersOfTwoLessThanClient Output|<pre style="border: 0px; background: #000; color:#fff;">1
 
2
 
2
 
4
 
4
Line 42: Line 45:
 
16
 
16
 
32
 
32
64</nowiki>
+
64
 +
128</pre>}}
  
 
=Code to Implement=
 
=Code to Implement=
Line 61: Line 65:
 
You can create an [https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html anonymous inner class] or a named class if you prefer.
 
You can create an [https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html anonymous inner class] or a named class if you prefer.
  
Note: if you type the following, IntelliJ will offer you to "Implement methods" necessary to create an anonymous inner class
+
Note: if you type the following, and hover over the red line, IntelliJ will offer you to "Implement methods" necessary to create an anonymous inner class. You only need to override the '''hasNext()''' and '''next()''' methods.
<nowiki>return new Iterator<>() {
+
 
 +
<syntaxhighlight lang="java">
 +
return new Iterator<>() {
 
       // Implement/Override necessary methods
 
       // Implement/Override necessary methods
}</nowiki>
+
};
 +
</syntaxhighlight>
  
 
=Testing Your Solution=
 
=Testing Your Solution=

Latest revision as of 03:17, 18 August 2023

Motivation

  • Gain experience with implementing interfaces.
  • Build a utility which will come in handy later in the semester (for example, the Scan exercise).


Investigate

anonymous classes

interface Iterable<T>

interface Iterator<T>

Video: Implementing Iterable and Iterator  

Mistakes To Avoid

Attention niels epting.svg Warning: Do NOT Parallelize
Attention niels epting.svg Warning: Do NOT confuse Iterable<T> from Iterator<T>

Client

class: PowersOfTwoLessThanClient.java CLIENT
package: iteration.powersoftwo.client
source folder: student/src/main/java
PowersOfTwoLessThanClient  
for (int powerOf2 : new PowersOfTwoLessThan(231)) {
	System.out.println(powerOf2);
}
PowersOfTwoLessThanClient Output  
1
2
4
8
16
32
64
128

Code to Implement

It is important to consider what state each class should encapsulate. The class PowersOfTwoLessThan, which is Iterable, should be have need to store little (if anything) beyond the maxExclusive passed in to its constructor. Further, PowersOfTwoLessThan should be immutable. There is no need to change any of the data during its lifetime.

The Iterator<Integer> instances created whenever one invokes the iterator() method? Now, the data for those instances are going to need to mutate.

One should NOT need to create a List to support this class. A single private final int instance variable is all you need for PowersOfTwoLessThan and a single (mutable) int instance variable is all you need for its Iterator.

class: PowersOfTwoLessThan.java Java.png
methods: constructor
iterator
package: iteration.powersoftwo.exercise
source folder: student/src/main/java

constructor

constructor: public PowersOfTwoLessThan(int maxExclusive)

iterator

method: public Iterator<Integer> iterator() Sequential.svg (sequential implementation only)

You can create an anonymous inner class or a named class if you prefer.

Note: if you type the following, and hover over the red line, IntelliJ will offer you to "Implement methods" necessary to create an anonymous inner class. You only need to override the hasNext() and next() methods.

return new Iterator<>() {
      // Implement/Override necessary methods
};

Testing Your Solution

Correctness

class: _PowersOfTwoTestSuite.java Junit.png
package: iteration.powersoftwo.exercise
source folder: testing/src/test/java

Pledge, Acknowledgments, Citations

file: studio-powers-of-two-iterable-pledge-acknowledgments-citations.txt

More info about the Honor Pledge