diff --git a/Doc/Sd1/appendix.xml b/Doc/Sd1/appendix.xml index c0a04282034e87b1ca907954d0f0df5cfb39a87a..1d59125f48ff563bd2cc14ac28e65104063a816a 100644 --- a/Doc/Sd1/appendix.xml +++ b/Doc/Sd1/appendix.xml @@ -660,7 +660,7 @@ APPID=7cufdhdcgdhsgdhgfcgsdss67b3&units=metric&<emphasis role="red">id=3 <title>ma/Copy URL result to file</title> <programlisting language="java">FileUtils.<link - xlink:href="https://commons.apache.org/proper/commons-io/javadocs/api-2.6/org/apache/commons/io/FileUtils.html#copyURLToFile-java.net.URL-java.io.File-">copyURLToFile</link>( + xlink:href="https://commons.apache.org/proper/commons-io/javadocs/api-2.6/org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL,java.io.File)">copyURLToFile</link>( "https://api.openweathermap.org/data/2.5/forecast...", new File("weatherData.json"));</programlisting> @@ -1405,9 +1405,9 @@ Your choice: 2</screen> <para><xref linkend="glo_Java"/> allows for matching strings by <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html">regular + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html">regular expressions</link> to be used with e.g. <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#matches(java.lang.String)">String.matches(...)</link>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#matches(java.lang.String)">String.matches(...)</link>. Examples:</para> <glosslist> @@ -1467,7 +1467,7 @@ Eve,Gardener, ,32-44-2234</screen> <para>Each person record is being represented by four values being separated by three commas. Empty attribute values require a single space. The method <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#split(java.lang.String)">String.split(...)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#split(java.lang.String)">String.split(...)</link> is your friend when reading this file on program startup using <quote>,</quote> as separator split token.</para> @@ -1740,8 +1740,8 @@ The red cross acts worldwide</screen> <listitem xml:id="sd1ProjectGrepUnitTestingHint"> <para>Testing requires capturing of output being generated by e.g. <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">System.out</methodname><code>.</code><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#println(java.lang.String)">println(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">System.out</methodname><code>.</code><methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println(java.lang.String)">println(...)</methodname> calls. Consider the following code writing the string <quote>Hello World!</quote> to standard output:</para> @@ -1760,13 +1760,13 @@ The red cross acts worldwide</screen> xlink:href="https://stackoverflow.com/questions/1119385/junit-test-for-system-out-println">http://stackoverflow.com/questions/1119385/junit-test-for-system-out-println</uri> we redefine the standard output stream by a private instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/ByteArrayOutputStream.html">java.io.ByteArrayOutputStream</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/ByteArrayOutputStream.html">java.io.ByteArrayOutputStream</classname>. Due to <productname>Junit</productname>'s <classname xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Before.html">@Before</classname> and <classname xlink:href="http://junit.sourceforge.net/javadoc/org/junit/After.html">@After</classname> annotations this instance replaces <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">System.out</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">System.out</classname> during our tests:</para> <programlisting language="java">import java.io.ByteArrayOutputStream; @@ -1849,7 +1849,7 @@ public class AppTest { value | t| t| f| f| t| f| t| f| t| t| t| f| t| f| t ...</screen> <para>Since we intend to deal with a large number <code - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> of values (rather than just 100 ) we only consider odd values since even numbers are never prime except for the value 2. Thus 0 will represent 1, 1 will represent 3 and n will represent 2 * n + 1:</para> @@ -1861,7 +1861,7 @@ represents | 1| 3| 5| 7| 9| 11| 13| 15| ... value | t| f| f| f| t| f| f| t| ...</screen> <para>This requires a boolean array of just <code - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE / 2</code>. Start from the following skeleton:</para> <programlisting language="java">public class Sieve { @@ -1899,7 +1899,7 @@ value | t| f| f| f| t| f| f| t| ...</screen> sieve algorithm</link> into smaller tasks and write appropriate tests. Start with small <code language="java">limit</code> values (like 20) and extend to <code - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> step by step.</para> </tip> diff --git a/Doc/Sd1/arrays.xml b/Doc/Sd1/arrays.xml index f359765349f41276495b2189c5a2ad0ef2fdd4ad..e5e334b7b5565bbdfb20b7ea3a469f5da8c2f97b 100644 --- a/Doc/Sd1/arrays.xml +++ b/Doc/Sd1/arrays.xml @@ -748,7 +748,7 @@ Mark|frequency be achieved using:</para> <para><programlisting language="java">int value = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#valueOf(java.lang.String)">Integer.valueOf()</link></programlisting></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#valueOf(java.lang.String)">Integer.valueOf()</link></programlisting></para> </listitem> <listitem> @@ -860,14 +860,14 @@ Mark|frequency <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toCharArray--">toCharArray()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#toCharArray()">toCharArray()</methodname> allows for de-composing a String into a corresponding array of char values.</para> </listitem> <listitem> <para>Normalize strings with respect to case using <methodname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toLowerCase--">toLowerCase(...)</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#toLowerCase()">toLowerCase(...)</methodname>.</para> </listitem> </orderedlist> </tip> @@ -1026,7 +1026,7 @@ final String shapes[] = {"Triangle", "Circle"};</programlisting> <question> <para>This exercise aims at a better understanding of <code language="java">System.out.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</link></code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</link></code> already being used in <xref linkend="sd1QandaSquareNumberTableFormatted"/> and other exercises. Consider the following snippet:</para> @@ -1088,18 +1088,18 @@ System.out.format("An integer %3d and a double value %6.2f\n", <para>At first sight these method calls appear as if the format() method had been multiply overloaded. This observation is misleading despite the fact that a related <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#format(java.util.Locale,java.lang.String,java.lang.Object...)">overloaded + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.util.Locale,java.lang.String,java.lang.Object...)">overloaded method</link> providing an additional locale argument does indeed exist.</para> <para>According to <code language="java">System.out.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format(...)</methodname></code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format(...)</methodname></code> the first argument must be of type <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</code>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</code>. Additional arguments of <emphasis>arbitrary</emphasis> type may be added in accordance with the <quote>%...</quote> <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Formatter.html#syntax">format + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Formatter.html#syntax">format strings</link> inside the first argument. These arguments are being passed as instances of <classname>Object</classname>. The <methodname>format(...)</methodname> method uses the @@ -1170,7 +1170,7 @@ java.util.IllegalFormatConversionException: <emphasis role="bold">d != java.lang <section xml:id="sd1_array_sect_classArraysHelper"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">java.util.Arrays</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">java.util.Arrays</classname> helpers</title> <info> @@ -1185,11 +1185,11 @@ java.util.IllegalFormatConversionException: <emphasis role="bold">d != java.lang <figure xml:id="sd1_array_fig_arraysToStringSort"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#toString(java.lang.Object%5B%5D)">toString(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#toString(java.lang.Object%5B%5D)">toString(...)</methodname> and <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort(...)</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort(...)</methodname></title> <programlisting language="java">final String[] names = {"Eve", "Aaron", "Paul", "Mandy"}; @@ -1207,8 +1207,8 @@ sort|toString: [Aaron, Eve, Mandy, Paul]</screen> <figure xml:id="sd1_array_fig_arraysBinarySearch"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname></title> <programlisting language="java">final String[] names = {"Aaron", "Eve", "Mandy", "Paul"}; @@ -1232,8 +1232,8 @@ sort|find(Mandyer): -4</screen> <qandaentry> <question> <para>Read the <xref linkend="glo_Javadoc"/> of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname>and + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname>and explain the three integer search result values in <xref linkend="sd1_array_fig_arraysBinarySearch"/>.</para> @@ -1318,7 +1318,7 @@ sort|find(Mandyer): -4</screen> <para>This insertion point's index is 2 corresponding to the third array element. According to the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname> method's documentation this corresponds to a return value of -2 - 1 == -3.</para> @@ -1342,8 +1342,8 @@ sort|find(Mandyer): -4</screen> <figure xml:id="sd1_array_fig_arraysFill"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#fill(java.lang.Object%5B%5D,int,int,java.lang.Object)">fill(...)</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#fill(java.lang.Object%5B%5D,int,int,java.lang.Object)">fill(...)</methodname></title> <informaltable border="0"> <colgroup width="48%"/> @@ -1370,8 +1370,8 @@ toString: [N.N, N.N, N.N, N.N]</screen></td> <figure xml:id="sd1_array_fig_arraysCopyOf"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(T%5B%5D,int,int)">copyOfRange(...)</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#copyOfRange(T%5B%5D,int,int)">copyOfRange(...)</methodname></title> <programlisting language="none">final String[] names = {"Eve", "Aaron", "Paul", "Mandy"}; @@ -1387,8 +1387,8 @@ System.out.println("toString: " + Arrays.toString(lastTwoNames));</programlistin <figure xml:id="sd1_array_fig_arraysEquals"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#equals(java.lang.Object%5B%5D,java.lang.Object%5B%5D)">equals(...)</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#equals(java.lang.Object%5B%5D,java.lang.Object%5B%5D)">equals(...)</methodname></title> <programlisting language="java">final String[] l1 = {new String("Eve"), new String("Aaron"), @@ -1507,7 +1507,7 @@ Extended array: [Eve, John, Peter, Jill, <emphasis role="red">Ernest</emphasis>] <figure xml:id="sd1_array_fig_arraysExtendArrayHelper"> <title>Using <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOf(int%5B%5D,int)">Arrays.copyOf()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#copyOf(int%5B%5D,int)">Arrays.copyOf()</methodname></title> <programlisting language="none">public static void main(String[] args) { final int [] start = {1,7,-4}, @@ -3041,9 +3041,9 @@ public static boolean isPrime(final long candidate) { to an arbitrary limit (say limit == 10000) and returns the number of primes within [2, limit]. Measure this method's execution time. You may want to consult <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#currentTimeMillis()">System.currentTimeMillis()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#currentTimeMillis()">System.currentTimeMillis()</methodname> or <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#nanoTime()">System.nanoTime()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#nanoTime()">System.nanoTime()</methodname> for that purpose.</para> </listitem> </orderedlist> @@ -3128,7 +3128,7 @@ public static boolean isPrime(final long candidate) { <listitem> <para>Executing <methodname - xlink:href="P/Sd1/Prime/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/PrimeNumbers.html#main-java.lang.String:A-">main()</methodname> + xlink:href="P/Sd1/Prime/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/PrimeNumbers.html#main(java.lang.String:A)">main()</methodname> allows for estimating the prime number computing performance:</para> @@ -3278,7 +3278,7 @@ public int[] getValues() { <para>You may either construct a suitable copy containing the current elements yourself or get enlightened by reading the <xref linkend="glo_API"/> documentation of <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link>.</para> </caution> </listitem> @@ -3313,7 +3313,7 @@ for (final int i: unsortedValues) { <listitem> <para>Modify your<methodname - xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue(int)"> addValue(...)</methodname> method's implementation. Though there are more elaborate sorting methods available in Java we'll do it the hard way ourselves in this exercise. Consider @@ -3326,7 +3326,7 @@ store.addValue(9); store.addValue(3);</programlisting> <para>Prior to inserting a new value our <methodname - xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue(int)">addValue(...)</methodname> method shall find a suitable position inside the array of already added values to insert the new value. When adding the last value 3 in the above example the internal array already @@ -3443,9 +3443,9 @@ Your sample's median is: 1.0</screen> <orderedlist> <listitem> <para>The <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link> method in <methodname - xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getValues--">getValues()</methodname> + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getValues()">getValues()</methodname> returns that portion of our <code language="java">int[] values</code> array actually been filled with data.</para> </listitem> @@ -3481,7 +3481,7 @@ for (final int i: unsortedValues) { <listitem> <para>Modify your<methodname - xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue(int)"> addValue(...)</methodname> method's implementation. Though there are more elaborate sorting methods available in Java we'll do it the hard way ourselves in this exercise. Consider @@ -3494,7 +3494,7 @@ store.addValue(9); store.addValue(3);</programlisting> <para>Prior to inserting a new value our <methodname - xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue(int)">addValue(...)</methodname> method shall find a suitable position inside the array of already added values to insert the new value. When adding the last value 3 in the above example the internal array already @@ -3545,10 +3545,10 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> <listitem> <para>The constructor <methodname - xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#IntegerStore-int:A-">public + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#IntegerStore(int:A)">public IntegerStore(final int[] values)</methodname> internally uses our <methodname - xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue(int)">addValue(...)</methodname> method thus adding each array value one by one. Consider an alternative naive implementation:</para> @@ -3598,13 +3598,13 @@ public void testMedian() { <listitem> <para><methodname - xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getMedian--">double + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getMedian()">double getMedian()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/Driver.html#main-java.lang.String:A-">main(...)</methodname></para> + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/Driver.html#main(java.lang.String:A)">main(...)</methodname></para> </listitem> </orderedlist> </answer> diff --git a/Doc/Sd1/collections.xml b/Doc/Sd1/collections.xml index 3b1958e28caf2910da59db61276b7e7a3fb511b9..70fb45dafcd5f6cf43977cdbc0566d6782a42e19 100644 --- a/Doc/Sd1/collections.xml +++ b/Doc/Sd1/collections.xml @@ -86,18 +86,18 @@ <section xml:id="sd1Collection2exerciseSetString"> <title>A <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> of Strings</title> <qandaset defaultlabel="qanda" xml:id="sd1QandaSetString"> <title>Inserting strings into a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname>.</title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname>.</title> <qandadiv> <qandaentry> <question> <para>Create a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> of String instances including duplicates. Iterate over this set and write each value to <code language="java">System.out</code>:</para> @@ -150,18 +150,18 @@ Eve</screen> <section xml:id="sd1CollectionExerciseListString"> <title>A <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html">List</classname> of Strings</title> <qandaset defaultlabel="qanda" xml:id="sd1QandaListString"> <title>Inserting strings into a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname>.</title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html">List</classname>.</title> <qandadiv> <qandaentry> <question> <para>Create a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html">List</classname> of String instances including duplicates. Iterate over this list and write each value to <code language="java">System.out</code>:</para> @@ -234,9 +234,9 @@ Jim</screen> <para>Provide an appropriate constructor and override both <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#toString()">toString()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname> and <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> to allow execution of:</para> <programlisting language="java">// Defining and testing integer coordinates @@ -300,20 +300,20 @@ c12.equals("dummy"):false <section xml:id="sd1SetCoordinate"> <title>A <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> of Coordinate instances</title> <qandaset defaultlabel="qanda" xml:id="sd1QandaSetCoordinate"> <title>Inserting <link linkend="sd1CollectionDefCoordinate"><classname>Coordinate</classname></link> instances into a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname>.</title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname>.</title> <qandadiv> <qandaentry> <question> <para>Create a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> of <link linkend="sd1CollectionDefCoordinate"><classname>Coordinate</classname></link> instances including duplicates. Iterate over this set and write @@ -354,9 +354,9 @@ for (final Coordinate c : points) { (1|2)</screen> <para>This is due to our own fault not providing a <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">hashCode()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</methodname> implementation being compatible to our overridden <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> method. Consider:</para> <programlisting language="java">final Coordinate @@ -376,21 +376,21 @@ System.out.println("c12.hashCode() and c12Duplicate.hashCode():"+ xlink:href="http://tutorials.jenkov.com/java-collections/hashcode-equals.html">Java Collections - hashCode() and equals()</link>. The values actually stem from <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">hashCode()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</methodname> being defined in our superclass <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.</para> <para>The former exercise <xref linkend="sd1QandaSetString"/> involved instances of class String having well defined <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> and <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#hashCode()">hashCode()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#hashCode()">hashCode()</methodname> implementations. To resolve this issue we thus have to override not just <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> but <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">hashCode()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</methodname> as well:</para> <programlisting language="java">public class Coordinate { @@ -427,7 +427,7 @@ System.out.println("c12.hashCode() and c12Duplicate.hashCode():"+ <section xml:id="sd1CollectionExerciseWordSearch"> <title>Getting a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> of strings from a text file</title> <qandaset defaultlabel="qanda" xml:id="sd1QandaWordSearch"> @@ -496,7 +496,7 @@ System.out.println("c12.hashCode() and c12Duplicate.hashCode():"+ <emphasis role="bold"><code>.,:;?!"</code></emphasis> or white space characters may be achieved by means of <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#split(java.lang.String)">split(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#split(java.lang.String)">split(...)</methodname> and the regular expression <code language="java">String regex = "[ \t\"!?.,'´`:;]+"</code>;. This <quote>+</quote> sign indicates the appearance of a succession of one ore @@ -562,9 +562,9 @@ public void testWordSet() throws FileNotFoundException, IOException { <answer> <para>The desired result is easy to achieve by exchanging our <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname> by a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/SortedSet.html">SortedSet</classname>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/SortedSet.html">SortedSet</classname>:</para> <programlisting language="java">/** * The set of words found so far. @@ -616,15 +616,15 @@ printer</screen> <orderedlist> <listitem> <para><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Collections.html#sort(java.util.List,java.util.Comparator)">Collections.sort(</link>List<String>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html#sort(java.util.List,java.util.Comparator)">Collections.sort(</link>List<String>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> c) is your friend.</para> </listitem> <listitem> <para>Defining a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> class acting on strings works like:</para> <programlisting language="java">/** @@ -706,7 +706,7 @@ You found Pascal!"</literallayout> <listitem> <para>Define a class <classname>WordFrequency</classname> containing a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> attribute among with an integer number representing its frequency of appearance:</para> @@ -733,9 +733,9 @@ public class WordFrequency { any frequency value.</para> <para>Override <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals(...)</methodname> and <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">hashValue()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashValue()</methodname> accordingly.</para> </listitem> @@ -788,9 +788,9 @@ public class WordFrequency { <para>After processing the input text file sort your <code>List<WordFrequency></code> by a suitable <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator<WordFrequency></classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator<WordFrequency></classname> instance by means of <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Collections.html#sort(java.util.List,java.util.Comparator)">Collections.sort(...)</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html#sort(java.util.List,java.util.Comparator)">Collections.sort(...)</methodname>.</para> </listitem> </orderedlist> </listitem> @@ -958,13 +958,13 @@ End of records</screen> <listitem> <para>The constructor <link - xlink:href="P/Sd1/HtmlFormatting/Simple/Exercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/htmlformat/Address.html#Address-java.lang.String-int-">Address(...)</link> + xlink:href="P/Sd1/HtmlFormatting/Simple/Exercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/htmlformat/Address.html#Address(java.lang.String,int)">Address(...)</link> does not yet parse address records but creates constant dummy data instead. Use the parameter <code>csvRecord</code> to actually initialize the desired address fields <code>firstName</code>, <code>lastName</code>, ..., <code>web</code>. Hint: You may use the <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#split(java.lang.String)">split(...)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#split(java.lang.String)">split(...)</link> method:</para> <programlisting language="java">... = s.split("\",\"");</programlisting> @@ -1055,7 +1055,7 @@ End of records</screen> <para>This requires textually replacing special characters by the above entities <abbrev>e.g.</abbrev> by means of <classname>String</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#replace(java.lang.CharSequence,java.lang.CharSequence)">replace(...)</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#replace(java.lang.CharSequence,java.lang.CharSequence)">replace(...)</methodname>.</para> </glossdef> </glossentry> </glosslist> @@ -1108,11 +1108,11 @@ End of records</screen> <listitem> <para>You may direct your generated HTML output to a file rather than to the standard output <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">System.out</link>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">System.out</link>. This can be achieved by opening an output <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html">PrintStream</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname> related to a file by means of the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#%3Cinit%3E(java.lang.String)">PrintStream</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#%3Cinit%3E(java.lang.String)">PrintStream</methodname> output filename constructor. Your resulting output may transform the file <filename>addresses.txt</filename> into <filename>addresses.txt.xhtml</filename>. The latter should be @@ -1150,7 +1150,7 @@ End of records</screen> <question> <para>We want to partly implement a simplified version of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html">Set</classname>:</para> <programlisting language="java">package de.hdm_stuttgart.mi.sd1.stringset; @@ -1286,7 +1286,7 @@ public interface Set_String { <listitem> <para>On lookup use hash code values prior to comparing via <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> in order to gain performance.</para> </listitem> </orderedlist> @@ -1373,28 +1373,28 @@ public interface Set_String { <para>A cleaner solution might conceive the above result output as a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>>. The set of words appearing in a text will be regarded as keys. The frequencies of appearance are corresponding values:</para> <informaltable border="1" width="40%"> <tr> <th colspan="2"><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>></th> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>></th> </tr> <tr> <th>Word (<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>)</th> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>)</th> <th>Frequency (<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>)</th> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>)</th> </tr> <tr> @@ -1430,10 +1430,10 @@ public interface Set_String { <qandaset defaultlabel="qanda" xml:id="sde1QandaWordFreqMap"> <title>Implementing word frequencies by <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>> instances.</title> <qandadiv> @@ -1443,10 +1443,10 @@ public interface Set_String { replacing your <classname xlink:href="P/Sd1/WordFrequency1/Solution/target/site/apidocs/de/hdm_stuttgart/mi/sd1/textstat/WordFrequency.html">WordFrequency</classname> object by an instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>>. For the time being consider the output sorting order yet as irrelevant.</para> </question> @@ -1463,7 +1463,7 @@ public interface Set_String { <para>The subsequent exercise is considered to be optional with respect to the final course's examination. It does however provide some deeper insight into the subject of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname> instances.</para> <qandaset defaultlabel="qanda" xml:id="sde1QandaWordFreqMapSortOrder"> @@ -1480,19 +1480,19 @@ public interface Set_String { xlink:href="https://stackoverflow.com/questions/11647889/sorting-the-mapkey-value-in-descending-order-based-on-the-value">Sorting the Map<Key,Value> in descending order based on the value</quote> you may create a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.Entry.html">Entry</classname>(<<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html">List</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.Entry.html">Entry</classname>(<<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>>> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>>> from your <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Map.html">Map</classname><<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html">Map</classname><<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>> instance on demand (i.e. when sorting). Then define an appropriate <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> class to get this list sorted.</para> </question> diff --git a/Doc/Sd1/coreClasses.xml b/Doc/Sd1/coreClasses.xml index 7adac727a3d5b68ed1644bf889e52b35145e5e94..9beda5d2d0316b0da221bed85ae67410a43cfa50 100644 --- a/Doc/Sd1/coreClasses.xml +++ b/Doc/Sd1/coreClasses.xml @@ -23,7 +23,7 @@ <figure xml:id="sd1_coreclasses_fig_object"> <title>Superclass <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname></title> <itemizedlist> <listitem> @@ -74,7 +74,7 @@ linkends="sd1_coreclasses_fig_stringCopyConstructorApiHint-1" xml:id="sd1_coreclasses_fig_stringCopyConstructorApiHint-1-co"/> final String sCopy = new <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</link>(s); <co + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</link>(s); <co linkends="sd1_coreclasses_fig_stringCopyConstructorApiHint-2" xml:id="sd1_coreclasses_fig_stringCopyConstructorApiHint-2-co"/> System.out.println("sCopy == s: " + (sCopy == s)); <co @@ -106,7 +106,7 @@ sCopy.equals(s): true <coref <para>A clone carrying the same value <code language="java">"Eve"</code> is being created by virtue of the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</classname> class copy constructor.</para> </callout> @@ -118,7 +118,7 @@ sCopy.equals(s): true <coref <callout arearefs="sd1_coreclasses_fig_stringCopyConstructorApiHint-4-co" xml:id="sd1_coreclasses_fig_stringCopyConstructorApiHint-4"> <para>But both <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#%3Cinit%3E(java.lang.String)">String</classname> instances carry the same value.</para> </callout> </calloutlist> @@ -200,7 +200,7 @@ equals: true</screen></td> <listitem> <para>The <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> method compares two object's values.</para> </listitem> </itemizedlist> @@ -259,7 +259,7 @@ equals: true</screen></td> <title>Hashing in Java and <methodname>equals()</methodname></title> <para>Method <methodname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</methodname>: + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</methodname>: Instance 0 ⇨ o.<methodname>hashCode()</methodname>, of type <code language="java">int</code>.</para> @@ -447,8 +447,8 @@ equals: true</screen></td> <tip> <para>Excerpt from <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html">Object</classname>.<link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</link>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.<link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">hashCode()</link>:</para> <blockquote> <para>However, the programmer should be aware that producing @@ -539,7 +539,7 @@ equals: true</screen></td> <para>It is not possible to construct a perfect <methodname>hashCode()</methodname> method acting on arbitrary strings. A Java <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> consists of individual <code language="java">char</code> elements each requiring two bytes. Considering strings of fixed length we have the following number of different strings:</para> @@ -646,16 +646,16 @@ hashcode of BB: 2112</screen></td> <section xml:id="sw1SectionCoreClassesUsingMath"> <title>Using class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">Math</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">Math</classname></title> <para><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">Math</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">Math</classname> is yet another class belonging to the core set of the <xref linkend="glo_Java"/> programing language.</para> <qandaset defaultlabel="qanda" xml:id="sw1QandaCircleAreaMathPackage"> <title>Using constants from <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">java.lang.Math</classname>.</title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">java.lang.Math</classname>.</title> <qandadiv> <qandaentry> @@ -682,7 +682,7 @@ hashcode of BB: 2112</screen></td> </m:math> </inlineequation> yourself. Actually <xref linkend="glo_Java"/> predefines constants in <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">java.lang.Math</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">java.lang.Math</classname> class. Read its documentation to rewrite your code thereby replacing your own variable <code language="java">pi</code>'s definition .</para> @@ -706,9 +706,9 @@ hashcode of BB: 2112</screen></td> }</programlisting> <para>In case you bother about using the somewhat clumsy <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#PI">Math.PI</varname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#PI">Math.PI</varname> expression rather than just using <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#PI">PI</varname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#PI">PI</varname> itself some syntactic sugar is on offer by means of a <link xlink:href="https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html">static import</link> statement:</para> @@ -753,12 +753,12 @@ public final class Math { ...</programlisting> <para>This accounts for using the expression <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#field.summary">Math.PI</varname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#field.summary">Math.PI</varname>.</para> <para>The careful reader may have expected an <code language="java">import</code> statement in order to use the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">Math</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">Math</classname> class:</para> <programlisting language="java">import java.lang.<emphasis @@ -777,9 +777,9 @@ public class CircleAreaCalculator { }</programlisting> <para>But since the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html">Math</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html">Math</classname> class belongs to the <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-frame.html">java.lang</package> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-frame.html">java.lang</package> package it is present by default and does not have to be imported.</para> </answer> @@ -940,7 +940,7 @@ public class CircleAreaCalculator { <methodname>mask2(String s)</methodname> employing yet not covered <link linkend="sw1ChapterArrays">arrays</link> being based on the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#fill(char%5B%5D,char)">Arrays.fill + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#fill(char%5B%5D,char)">Arrays.fill (...)</methodname> library method.</para> </answer> </qandaentry> @@ -968,8 +968,8 @@ public class CircleAreaCalculator { <tip> <para>The method <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/StringBuffer.html">StringBuffer</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/StringBuffer.html#appendCodePoint(int)">appendCodePoint</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html#appendCodePoint(int)">appendCodePoint</methodname> allows the conversion of integer <xref linkend="glo_unicode"/> values to the corresponding character sequence.</para> </tip> @@ -1052,7 +1052,7 @@ public class CircleAreaCalculator { <listitem> <para>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> class does contain a method to retrieve a substring starting and ending at given index positions. Read its documentation to find it.</para> @@ -1060,7 +1060,7 @@ public class CircleAreaCalculator { <listitem> <para>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> class does contain a method returning the <code language="java" xlink:href="https://docs.oracle.com/javase/tutorial/java/data/characters.html">char</code> @@ -1079,9 +1079,9 @@ public class CircleAreaCalculator { <para>We present a step by step solution. We start by coding a loop creating the set of all substrings of length 13. Reading the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> documentation the method<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#substring(int,int)"> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#substring(int,int)"> substring(...)</methodname> allows for accessing the set of all substrings of 13 adjacent digits:</para> @@ -1128,7 +1128,7 @@ public class CircleAreaCalculator { 0420752963450</screen> <para>The method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#charAt(int)">charAt(int + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#charAt(int)">charAt(int index)</methodname> allows us to access each character within our string individually. We need to write a method which converts a digit like '4' to the value 4. Remember: The @@ -1182,7 +1182,7 @@ public class CircleAreaCalculator { arithmetic overflow: The product 5 × 3 × 9 × 7 × 5 × 3 × 6 × 9 × 7 × 8 × 1 × 7 × 9 is actually 2,700,507,600. This exceeds <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</code> of 2,147,483,647 <link xlink:href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html">being representable by a 4 byte <code language="java">int</code> @@ -1293,9 +1293,9 @@ public class CircleAreaCalculator { <listitem> <para>Read the documentation of <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#identityHashCode(java.lang.Object)">System.identityHashCode(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#identityHashCode(java.lang.Object)">System.identityHashCode(Object o)</link> and <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">Object.hashCode()</link>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">Object.hashCode()</link>.</para> </listitem> </itemizedlist> </tip> @@ -1333,13 +1333,13 @@ b1.equals(b2): true</programlisting> role="bold">"TestA" == "TestA"</emphasis>);</programlisting> <para>The method <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#identityHashCode(java.lang.Object)">System.identityHashCode(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#identityHashCode(java.lang.Object)">System.identityHashCode(Object o)</link> returns <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">Object.hashCode()</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">Object.hashCode()</link> rather then <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#hashCode()">String.hashCode()</link>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#hashCode()">String.hashCode()</link>. This hash code from <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">java.lang.Object</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">java.lang.Object</link> has a one to one correspondence to an object's reference and thus helps to understand the underlying object references:</para> @@ -1352,7 +1352,7 @@ b1.equals(b2): true</programlisting> <para><code language="java">a1</code> and <code language="java">a2</code> thus likely contain an identical object reference. Using the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> method for comparison indeed returns <code language="java">true</code>.</para> </callout> @@ -1360,7 +1360,7 @@ b1.equals(b2): true</programlisting> <callout arearefs="answerCoStringOperatorEquality-2-co" xml:id="answerCoStringOperatorEquality-2"> <para>Every call to the <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#%3Cinit%3E(java.lang.String)">String + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#%3Cinit%3E(java.lang.String)">String constructor</link> will create a new string instance. Thus <code language="java">b1</code> and <code language="java">b2</code> will hold two distinct references @@ -1381,7 +1381,7 @@ b1.equals(b2): true</programlisting> language="java">false</code>.</para> <para>The <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">equals()</methodname> method however still returns a value of true since both distinct objects carry an identical value.</para> </callout> @@ -1467,7 +1467,7 @@ b1.equals(b2): true</programlisting> literal <code language="java">"Anton"</code> and thus both variables <varname>name</varname> and <varname>reference</varname> will be initialized to a common <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance:</para> <informalfigure> @@ -1487,9 +1487,9 @@ b1.equals(b2): true</programlisting> <para>This time the Java compiler is unable to dynamically resolve the expression <code language="java">"An".concat("ton")</code> at compile time. Instead the method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#concat(java.lang.String)">concat(...)</methodname>will + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#concat(java.lang.String)">concat(...)</methodname>will be called at runtime resulting in a second <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance which by coincidence contains an identical value. Thus <varname>name</varname> and <varname>reference</varname> point to different objects:</para> @@ -1704,7 +1704,7 @@ File extension: html</screen> filename path conventions read the <classname>java.lang.System</classname> section of chapter 5 <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html">along + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html">along with its API</link>. The table of system properties in <xref linkend="bib_Kurniawan"/> will enable your implementation to work both on Windows and non-Windows systems @@ -1718,7 +1718,7 @@ File extension: html</screen> linkend="bib_Kurniawan"/> shows an example dissecting a string containing tokens being separated by space characters using the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/StringTokenizer.html">java.util.StringTokenizer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/StringTokenizer.html">java.util.StringTokenizer</classname> class. Read its documentation and learn how to specify string delimiters other than default space <code language="java">' '</code>. It'll allow you to dissect paths using separators @@ -1732,18 +1732,18 @@ File extension: html</screen> <listitem> <para>Assembling path components may be effected by either using a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> or a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/StringJoiner.html">StringJoiner</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/StringJoiner.html">StringJoiner</classname> instance. Mind the distinction between relative and absolute paths!</para> </listitem> <listitem> <para>The methods <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#indexOf(int)">indexOf(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#indexOf(int)">indexOf(...)</methodname> and <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#substring(int,int)">substring(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#substring(int,int)">substring(...)</methodname> come in handy when dissecting filenames into basename and extension.</para> </listitem> diff --git a/Doc/Sd1/deployment.xml b/Doc/Sd1/deployment.xml index 410c5f5863c948575af04b339070df63ac3e3a88..e1d514f44b4ef04f151aed8e6a25763b0b96c47c 100644 --- a/Doc/Sd1/deployment.xml +++ b/Doc/Sd1/deployment.xml @@ -53,7 +53,7 @@ public class ArrayMethodTest { <glosslist> <glossentry> <glossterm><link - xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#swap-int:A-int:A-">swap</link></glossterm> + xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#swap(int:A,int:A)">swap</link></glossterm> <glossdef> <para>This effectively requires extending the concept of @@ -89,7 +89,7 @@ public class ArrayMethodTest { <para>You may search the <xref linkend="glo_API"/> of class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Character.html">Character</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Character.html">Character</classname> assisting you to distinguish letters from non-letters.</para> </listitem> @@ -104,14 +104,14 @@ public class ArrayMethodTest { <glossentry> <glossterm><link - xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#containsSameElements-int:A-int:A-">containsSameElements</link></glossterm> + xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#containsSameElements(int:A,int:A)">containsSameElements</link></glossterm> <glossdef> <para>You may copy <code language="java">int[] b</code> array to a <quote>shadow</quote> array and then subsequently erase all elements of <code language="java">int[] a</code> from this copy. The method <link - xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#findIndex-int:A-int-">findIndex</link> + xlink:href="P/Sd1/Array/arraycalcExercise/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/Arraymethods.html#findIndex(int:A,int)">findIndex</link> is quite helpful.</para> <para>Consider for example <code language="java">int[] bCopy @@ -181,7 +181,7 @@ Your sample's median is: 6.0</screen> your <code language="java">main(String [] args)</code> method. These strings must be converted to integer values. This may be achieved by means of <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#parseInt-java.lang.String-">parseInt(String)</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#parseInt(java.lang.String)">parseInt(String)</methodname>.</para> <para>Depending on inconsistent user input like <quote><code language="java">three</code></quote> instead of <quote><code diff --git a/Doc/Sd1/errorHandling.xml b/Doc/Sd1/errorHandling.xml index d5509799d52559d4f064850b0872ab5dcd4b0b0f..405bd8b4f5d267bd85c5027826492ad19e9fa410 100644 --- a/Doc/Sd1/errorHandling.xml +++ b/Doc/Sd1/errorHandling.xml @@ -33,14 +33,14 @@ System.out.println(s.length())<co linkends="sd1_fig_compileRuntime-2" xml:id="sd1_fig_compileRuntime-2"> <para>Run time error: De-referencing <code language="java">null</code> yields a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname>.</para> </callout> </calloutlist> </figure> <figure xml:id="sd1_fig_npe"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> (<acronym>NPE</acronym> for short)</title> <programlisting language="java">final String s = null; @@ -52,7 +52,7 @@ System.out.println(s.length());</programlisting> <figure xml:id="sd1_fig_npe_is_a_class"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> is a class</title> <mediaobject> @@ -68,7 +68,7 @@ System.out.println(s.length());</programlisting> <programlisting language="java">... if (somethingBadHappens) { throw new <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html#%3Cinit%3E()">NullPointerException()</link>; + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html#%3Cinit%3E()">NullPointerException()</link>; } ...</programlisting> @@ -85,7 +85,7 @@ if (somethingBadHappens) { try { System.out.println(s.length()) ; } catch (final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</link> e) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</link> e) { System.out.println("Dear user, something bad just happened"); } System.out.println("Business as usual ...");</programlisting> @@ -112,9 +112,9 @@ try { System.out.println("Business as usual ...");</programlisting> <para>What happens if <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> is being replaced by <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname>?</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname>?</para> <para>Is there a way to catch all possible exceptions?</para> </question> @@ -131,9 +131,9 @@ try { System.out.println("Business as usual ...");</programlisting> <para>The runtime system throws a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> which is no subclass of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname>:</para> <mediaobject> <imageobject> @@ -142,15 +142,15 @@ System.out.println("Business as usual ...");</programlisting> </mediaobject> <para>If <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> was a subclass of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/OutOfMemoryError.html">OutOfMemoryError</classname> it would still be caught. But lacking an (upcast) inheritance relationship we are being left with the runtimes default terminating behaviour:</para> <screen>Exception in thread "main" <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">java.lang.NullPointerException</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">java.lang.NullPointerException</link> at exceptionhandling.NpeMsg.main(NpeMsg.java:8)</screen> </answer> </qandaentry> @@ -191,7 +191,7 @@ System.out.println("Business as usual ...");</programlisting> // Compile time error: // <emphasis role="red" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html">Unhandled exception: + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html">Unhandled exception: java.io.IOException</emphasis> Files.copy(sourcePath, destPath); ...</programlisting></td> @@ -227,15 +227,15 @@ System.out.println(s.length());</programlisting></td> <programlisting language="java"><link xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Test.html">@Test</link>(<link xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Test.html#expected()">expected</link> = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link>.class) + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link>.class) public void copyFile() throws IOException { final Path source = Paths.get("/tmp/source.txt"), dest = Paths.get("/tmp/dest.txt"); - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: <link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> }</programlisting> </figure> @@ -250,15 +250,15 @@ public void copyFile() throws IOException { <programlisting language="java">@Test(expected = FileAlreadyExistsException.class) public void copyFile() throws IOException { - final <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Path.html">Path</link> + final <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Path.html">Path</link> source = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Paths.html#get(java.lang.String,java.lang.String...)">Paths.get</link>("/tmp/source.txt"), + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Paths.html#get(java.lang.String,java.lang.String...)">Paths.get</link>("/tmp/source.txt"), dest = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Paths.html#get(java.lang.String,java.lang.String...)">Paths.get</link>("/tmp/dest.txt"); + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Paths.html#get(java.lang.String,java.lang.String...)">Paths.get</link>("/tmp/dest.txt"); - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: <link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> }</programlisting> <para>Modify this code by catching the exception inside @@ -273,22 +273,22 @@ public void copyFile() throws IOException { <programlisting language="java"><link xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Test.html">@Test</link>(<link xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Test.html#expected()">expected</link> = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link>.class) + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link>.class) public void copyFile() throws IOException { final Path source = Paths.get("/tmp/source.txt"), dest = Paths.get("/tmp/dest.txt"); try { - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: FileAlreadyExistsException + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // May work. + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#copy(java.nio.file.Path,java.nio.file.Path,java.nio.file.CopyOption...)">Files.copy</link>(source, dest); // Failure: FileAlreadyExistsException } catch (final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> e) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</link> e) { System.out.println("Destination file already exists"); } }</programlisting> <para>Since we swallow the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">FileAlreadyExistsException</classname> ourselves it is no longer being thrown. Due to the <code>@Test(expected = FileAlreadyExistsException.class)</code> annotation test execution now fails:</para> @@ -296,7 +296,7 @@ public void copyFile() throws IOException { <screen>Destination file already exists java.lang.AssertionError: Expected exception: <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/nio/file/FileAlreadyExistsException.html">java.nio.file.FileAlreadyExistsException</link></screen> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileAlreadyExistsException.html">java.nio.file.FileAlreadyExistsException</link></screen> </answer> </qandaentry> </qandadiv> @@ -311,15 +311,15 @@ java.lang.AssertionError: Expected exception: <link language="java">catch</code></title> <programlisting language="java"><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html">Scanner</link> scanner = null; + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html">Scanner</link> scanner = null; try { scanner = new <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/InputStream.html">Scanner(</link>System.in); + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/InputStream.html">Scanner(</link>System.in); ... // Something may fail } finally { if (null != scanner) { scanner.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#close()">close()</link>; // Clean up, save resources! + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#close()">close()</link>; // Clean up, save resources! } }</programlisting> </figure> @@ -329,7 +329,7 @@ try { linkend="glo_Java"/> 7)</title> <programlisting language="java">try (final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html">Scanner</link><co + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html">Scanner</link><co linkends="sd1_errorHandling_fig_tryWithResources-1" xml:id="sd1_errorHandling_fig_tryWithResources-1-co"/> scanner<co linkends="sd1_errorHandling_fig_tryWithResources-2" @@ -342,7 +342,7 @@ try { <callout arearefs="sd1_errorHandling_fig_tryWithResources-1-co" xml:id="sd1_errorHandling_fig_tryWithResources-1"> <para>Class must implement interface <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/AutoCloseable.html">AutoCloseable</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html">AutoCloseable</classname>.</para> </callout> <callout arearefs="sd1_errorHandling_fig_tryWithResources-2-co" @@ -354,7 +354,7 @@ try { <callout arearefs="sd1_errorHandling_fig_tryWithResources-3-co" xml:id="sd1_errorHandling_fig_tryWithResources-3"> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#close()">close()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#close()">close()</methodname> method will be called automatically before leaving block scope.</para> </callout> @@ -364,11 +364,11 @@ try { <section xml:id="sd1_errorhandling_sect_classException"> <title>Class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/index.html?java/io/File.html">java.lang.Exception</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/index.html?java/io/File.html">java.lang.Exception</classname></title> <figure xml:id="sd1_errorHandling_fig_stackTrace"> <title>Method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html#printStackTrace()">printStackTrace()</methodname></title> <informaltable border="0"> <tr> @@ -388,7 +388,7 @@ public class StackTrace { }</programlisting></td> <td valign="top"><screen>Exception in thread "main" - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">java.lang.NullPointerException</link> + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">java.lang.NullPointerException</link> at ex.Trace.c(Trace.java:10) at ex.Trace.b(Trace.java:7) at ex.Trace.a(Trace.java:6) @@ -403,17 +403,17 @@ public class StackTrace { <informaltable border="0"> <tr> <td valign="top"><programlisting language="java">try { - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileInputStream.html">FileInputStream</link> f = new <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileInputStream.html#%3Cinit%3E(java.io.File)">FileInputStream( + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileInputStream.html">FileInputStream</link> f = new <link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileInputStream.html#%3Cinit%3E(java.io.File)">FileInputStream( new File("test.txt"))</link>; } catch(final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</link> e) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileNotFoundException.html">FileNotFoundException</link> e) { System.err.println( "File not found"); } catch (final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html">IOException</link> e) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html">IOException</link> e) { System.err.println( "IO error"); } catch(final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Exception.html">Exception</link> e) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html">Exception</link> e) { System.err.println("General error"); }</programlisting></td> @@ -433,15 +433,15 @@ public class StackTrace { <tr> <td valign="top"><programlisting language="none">try { FileInputStream f = new <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileInputStream.html">FileInputStream</link>( - new <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/File.html#%3Cinit%3E(java.lang.String)">File("test.txt"))</link>; + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileInputStream.html">FileInputStream</link>( + new <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/File.html#%3Cinit%3E(java.lang.String)">File("test.txt"))</link>; } catch(Exception e) { System.err.println("General error"); } catch (<emphasis role="red" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html">IOException e</emphasis>) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html">IOException e</emphasis>) { System.err.println( "IO error"); } catch(<emphasis role="red" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileNotFoundException.html">FileNotFoundException e</emphasis>) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileNotFoundException.html">FileNotFoundException e</emphasis>) { System.err.println("File not found"); }</programlisting></td> @@ -515,7 +515,7 @@ static public String convert(final String input) { <listitem> <para>Use <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html">IllegalArgumentException</classname>.</para> </listitem> </itemizedlist> </figure> @@ -525,10 +525,10 @@ static public String convert(final String input) { <programlisting language="java">public class CardinalException extends <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</link> { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html">IllegalArgumentException</link> { public CardinalException(final String msg) { - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/IllegalArgumentException.html#%3Cinit%3E(java.lang.String)">super(msg)</link>; + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html#%3Cinit%3E(java.lang.String)">super(msg)</link>; } }</programlisting> </figure> diff --git a/Doc/Sd1/gettingStarted.xml b/Doc/Sd1/gettingStarted.xml index a235f55be643ef23d261dc5b9349ff2874dd69e6..aea3210fb540235b7ff9f3687272bbb5806cd762 100644 --- a/Doc/Sd1/gettingStarted.xml +++ b/Doc/Sd1/gettingStarted.xml @@ -1408,7 +1408,7 @@ Hello, world <co linkends="sd1QandaSnippetHelloWorldExecuteStep-2" language="java">\n</code></quote> <coref linkend="sd1QandaSnippetHelloWorldNewline-1-co"/> allows for using just a single <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#println(java.lang.String)">System.out.println("...")</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println(java.lang.String)">System.out.println("...")</methodname> statement:</para> <programlisting language="java">public static void main(String[] args) { @@ -2809,7 +2809,7 @@ Generating /ma/goik/First/target/site/apidocs/help-doc.html... </screen> <para>See e.g. <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">class + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">class String documentation</link>.</para> </figure> diff --git a/Doc/Sd1/inheritance.xml b/Doc/Sd1/inheritance.xml index 61a409b085a678d353c40c66858c25d4da829783..f3ddbef3a4b5bc898e94b47bde2e53b42a2e3465 100644 --- a/Doc/Sd1/inheritance.xml +++ b/Doc/Sd1/inheritance.xml @@ -470,10 +470,10 @@ public <link <para>On execution the string literal "secret" will be represented as a <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> object in memory. Each new user input string will be represented as a <emphasis>different</emphasis> <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> object in memory as well.</para> <para>Unfortunately the usual <quote>==</quote> operator only @@ -484,18 +484,18 @@ public <link object identity rather than object equality.</para> <para>Two different <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instances albeit being different object instances may off course be equal with respect to their <quote>payload</quote> namely the strings they both represent. Comparing for object equality rather than for object identity in <xref linkend="glo_Java"/> requires overriding the <methodname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">Object.equals(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">Object.equals(Object o)</methodname> method. This override does exist in class <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html">String</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>. Within the given context we may thus simply use <methodname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">String.equals(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#equals(java.lang.Object)">String.equals(Object o)</methodname>:</para> <programlisting language="none">try (final Scanner scan = new Scanner(System.in)) { @@ -526,7 +526,7 @@ public <link <para>The preceding exercise <xref linkend="sd1_qanda_stringEqualProblem"/> told us to override <methodname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">Object.equals(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">Object.equals(Object o)</methodname> when comparing for the equality of different objects.</para> @@ -605,7 +605,7 @@ if (day.equals(Day.FRIDAY)) ... // Oops: NPE approaching ...</programlisting> <figure xml:id="sda_inherit_fig_shapeToStringRedefine"> <title>Overwriting <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#toString--">toString()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString--">toString()</methodname></title> <mediaobject> <imageobject> @@ -728,7 +728,7 @@ if (day.equals(Day.FRIDAY)) ... // Oops: NPE approaching ...</programlisting> <qandaentry> <question> <para>Consider two <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> instances:</para> <informaltable border="1"> @@ -744,7 +744,7 @@ if (day.equals(Day.FRIDAY)) ... // Oops: NPE approaching ...</programlisting> <tr> <td valign="top"><programlisting language="java">final <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</link> a = new StringBuffer("test"), b = new StringBuffer("test"); @@ -782,9 +782,9 @@ System.out.println(a.equals(b));</programlisting></td> <tip> <para>Take a closer look at the <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> and <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> <xref linkend="glo_API"/> regarding the <methodname>toString()</methodname> method.</para> </tip> @@ -792,7 +792,7 @@ System.out.println(a.equals(b));</programlisting></td> <answer> <para>The <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> <xref linkend="glo_API"/> reveals:</para> <screen>public boolean equals (Object anObject) @@ -809,22 +809,22 @@ true if the given object represents a String equivalent to this string, false ot <para>In a nutshell: Two instances of String will be compared for equality character by character. The superclass <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> method is being overridden.</para> <para>In class <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> we do not find any <methodname>equals()</methodname> method. Thus <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> is not being overridden. When comparing two instances of <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> effectively <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname> will be executed. Its <xref linkend="glo_API"/> reveals:</para> <screen>public boolean equals (Object obj) @@ -836,7 +836,7 @@ Returns: true <emphasis role="red">if this object is the same as the obj argument</emphasis>; false otherwise.</screen> <para>Thus two instances of <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/StringBuffer.html">StringBuffer</classname> will be compared for object identity rather than representing the same string value.</para> </answer> @@ -859,7 +859,7 @@ true <emphasis role="red">if this object is the same as the obj argument</emphas Start by investigating both <methodname xlink:href="http://www.java2s.com/Tutorial/Java/0040__Data-Type/Usingthebuiltinenumerationmethodsvalues.htm">values()</methodname> and <methodname - xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Enum.html#ordinal()">ordinal()</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#ordinal()">ordinal()</methodname>.</para> </question> <answer> @@ -1383,7 +1383,7 @@ public abstract Shape scale(double factor);</programlisting> <section xml:id="sd1SectFigureToString"> <title>Providing <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#toString--">toString()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString--">toString()</methodname> methods</title> <qandaset defaultlabel="qanda" xml:id="sd1QandaFigureToString"> @@ -1404,9 +1404,9 @@ System.out.println(r);</programlisting> de.hdm_stuttgart.mi.sd1.shape.model.Rectangle@2a139a55</screen> <para>This result is due to the invocation of the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#toString--">toString()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString--">toString()</methodname> method being defined in the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname> superclass. Override this method in <classname>Shape</classname>, <classname>Circle</classname> and <classname>Rectangle</classname> accordingly to @@ -1672,7 +1672,7 @@ public class Rectangle <blockquote> <note> <para>Prominent Example: <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">java.lang.String</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">java.lang.String</classname>.</para> </note> </blockquote> </figure> @@ -1798,7 +1798,7 @@ System.out.print(c.equals(c)); //<emphasis role="red">true</emphasis>: Object <figure xml:id="sd1_inherit_fig_rectangleEquals"> <title>Implementing <classname>Rectangle</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname></title> <programlisting language="java">public class Rectangle extends Shape { @Override public boolean equals(Object o) { @@ -1833,7 +1833,7 @@ System.out.print(c.equals(c)); //<emphasis role="red">true</emphasis>: Object String s = (String) o;</programlisting> <para>On execution we receive a <classname - xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/ClassCastException.html">java.lang.ClassCastException</classname>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ClassCastException.html">java.lang.ClassCastException</classname>:</para> <screen>Exception in thread "main" java.lang.ClassCastException: class java.util.Scanner cannot be cast to class java.lang.String @@ -1881,7 +1881,7 @@ if (o <link xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-15 <figure xml:id="sd1_inherit_fig_circleEquals"> <title>Implementing <classname>Circle</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname></title> <programlisting language="java">public class Circle extends Shape { @Override public boolean equals(final Object o) { @@ -1925,7 +1925,7 @@ c.equals(r1): false</screen></td> <section xml:id="sd1_inherit_sect_Override"> <title>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Override.html">@Override</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Override.html">@Override</classname> annotation.</title> <figure xml:id="sd1_inherit_fig_overrideToString"> @@ -1956,7 +1956,7 @@ c.equals(r1): false</screen></td> }</programlisting> <para>Explanation: The given method does not override <methodname - xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#toString()">Object.toString()</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()">Object.toString()</methodname>.</para> </figure> </section> </chapter> diff --git a/Doc/Sd1/interfacesAbstractClasses.xml b/Doc/Sd1/interfacesAbstractClasses.xml index 98f85cf0000926a85fd1939e0f2b4c7984de230e..0b94e6029559da0e70eb267abb957cf329d1f193 100644 --- a/Doc/Sd1/interfacesAbstractClasses.xml +++ b/Doc/Sd1/interfacesAbstractClasses.xml @@ -134,7 +134,7 @@ try (final Text2File output = } catch (FileNotFoundException e){...}</programlisting></td> <td valign="top"><para>Compile time error:</para><screen>Required: - <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/AutoCloseable.html">java.lang.AutoCloseable</link> + <link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html">java.lang.AutoCloseable</link> Found: de.hdm_stuttgart.mi.sd1.Text2File</screen></td> </tr> @@ -152,7 +152,7 @@ Found: <figure xml:id="sd1_interface_fig_AutoCloseablePromise"> <title>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/AutoCloseable.html">AutoCloseable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html">AutoCloseable</classname> promise</title> <informaltable border="0"> @@ -213,13 +213,13 @@ void close​() <co linkends="sd1_interface_fig_AutoCloseablePromise-2.2" <callout arearefs="sd1_interface_fig_AutoCloseablePromise-1-co" xml:id="sd1_interface_fig_AutoCloseablePromise-1"> <para>Promise to implement the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/AutoCloseable.html">AutoCloseable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html">AutoCloseable</classname> interface. This boils down to implement <methodname>public void close()</methodname> at <coref linkend="sd1_interface_fig_AutoCloseablePromise-3-co"/>.</para> <para>Notice the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Override.html">@Override</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Override.html">@Override</classname> annotation resemblance to overriding base class methods in derived classes.</para> </callout> @@ -240,7 +240,7 @@ void close​() <co linkends="sd1_interface_fig_AutoCloseablePromise-2.2" linkend="sd1_interface_fig_AutoCloseablePromise-1-co"/>.</para> <para>Caution: No <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Override.html">@Override</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Override.html">@Override</classname> here since close() is being implemented rather tan overriding a base class method not existing anyway.</para> </callout> @@ -248,7 +248,7 @@ void close​() <co linkends="sd1_interface_fig_AutoCloseablePromise-2.2" <callout arearefs="sd1_interface_fig_AutoCloseablePromise-4-co" xml:id="sd1_interface_fig_AutoCloseablePromise-4"> <para>Closing the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html">PrintStream</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname> thereby flushing buffered strings prior to releasing allocated operating system resources.</para> </callout> @@ -259,7 +259,7 @@ void close​() <co linkends="sd1_interface_fig_AutoCloseablePromise-2.2" language="java">null</code> causes subsequent <classname>Text2File</classname>.<methodname>println(...)</methodname> calls throwing a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NullPointerException.html">NullPointerException</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname>. Thus silent errors become observable errors.</para> </callout> </calloutlist></td> @@ -339,7 +339,7 @@ abstract void close​();<co <para>Extending <code language="java">abstract</code> class <classname>AutoCloseable</classname> replaces implementing the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/AutoCloseable.html">AutoCloseable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/AutoCloseable.html">AutoCloseable</classname> interface.</para> </callout> @@ -454,7 +454,7 @@ public interface MyFlushable extends MyAutoCloseable { <figure xml:id="sd1_fig_StringInterfaces"> <title>Interfaces implemented by class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname></title> <mediaobject> <imageobject> @@ -465,16 +465,16 @@ public interface MyFlushable extends MyAutoCloseable { <figure xml:id="sd1_fig_InterfaceComparable"> <title>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname> interface</title> <programlisting language="java">interface <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</link><<emphasis + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</link><<emphasis role="red">T</emphasis>> { <emphasis role="red"> ┌────┘</emphasis> <emphasis role="red">â–¼</emphasis> int <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html#compareTo(T)">compareTo​</link>(<emphasis + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html#compareTo(T)">compareTo​</link>(<emphasis role="red">T</emphasis> o); }</programlisting> @@ -482,20 +482,20 @@ public interface MyFlushable extends MyAutoCloseable { <figure xml:id="sd1_fig_StringComparable"> <title>class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> and <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname></title> <programlisting language="none">public class <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</link> implements <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</link> <<emphasis + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</link> implements <link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</link> <<emphasis role="red">String</emphasis> <co linkends="sd1_callout_StringComparable-1" xml:id="sd1_callout_StringComparable-1-co"/>>, ... { ... <emphasis role="red">┌────────────┘</emphasis> @Override <emphasis role="red">â–¼</emphasis> public int <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#compareTo(java.lang.String)">compareTo</link>(final <emphasis + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#compareTo(java.lang.String)">compareTo</link>(final <emphasis role="red">String</emphasis> <co linkends="sd1_callout_StringComparable-2" xml:id="sd1_callout_StringComparable-2-co"/> other) { @@ -508,15 +508,15 @@ public interface MyFlushable extends MyAutoCloseable { <callout arearefs="sd1_callout_StringComparable-1-co" xml:id="sd1_callout_StringComparable-1"> <para>Type parameter <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> to interface <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname>.</para> </callout> <callout arearefs="sd1_callout_StringComparable-2-co" xml:id="sd1_callout_StringComparable-2"> <para>Matching type <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> to type parameter in <coref linkend="sd1_callout_StringComparable-1-co"/>.</para> </callout> @@ -618,13 +618,13 @@ System.out.println("Hannah".compareTo("Hannah")); <co <tr> <td valign="top"><programlisting language="java">final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</link>[] names = { <co + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</link>[] names = { <co linkends="sd1_callout_StringSortAscending-1" xml:id="sd1_callout_StringSortAscending-1-co"/> "Laura", "Aaron", "Tim", "Peter", "Eve", "Bernie" }; -Arrays.<link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort</link>(names); <co +Arrays.<link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort</link>(names); <co linkends="sd1_callout_StringSortAscending-2" xml:id="sd1_callout_StringSortAscending-2-co"/> @@ -651,10 +651,10 @@ Tim</screen></td> <callout arearefs="sd1_callout_StringSortAscending-2-co" xml:id="sd1_callout_StringSortAscending-2"> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort</methodname>(Object[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort</methodname>(Object[] a) will rearrange the array of names alphabetically in ascending order as being defined by <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#compareTo(java.lang.String)">String.compareTo</methodname>(String + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#compareTo(java.lang.String)">String.compareTo</methodname>(String anotherString), see left part of <xref linkend="sd1_fig_StringSortAscDesc"/>.</para> </callout> @@ -669,7 +669,7 @@ Tim</screen></td> <qandaset defaultlabel="qanda" xml:id="sd1QandaArraysSortUnderstand"> <title>Understanding <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort()</methodname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort()</methodname></title> <qandadiv> <qandaentry> @@ -693,7 +693,7 @@ Tim</screen></td> <para>We would like to be able sorting <classname>Rectangle</classname> instances by their respective width using <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort(Object[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort(Object[] a)</methodname>. Right now sorting does not work at all. Consider:</para> @@ -715,11 +715,11 @@ Tim</screen></td> at de.hdm_stuttgart.mi.sd1.App.main(App.java:19)</screen> <para>Why does this happen? Read <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort(Object[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">Arrays.sort(Object[] a)</methodname>'s documentation and try to understand the <link xlink:href="http://hg.openjdk.java.net/jdk/jdk/file/300523d8b7b3/src/java.base/share/classes/java/util/ComparableTimSort.java">ComparableTimSort.java line 320 implementation</link> causing the above <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/ClassCastException.html">ClassCastException</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ClassCastException.html">ClassCastException</classname>. You don't have to understand what exactly the code does. Instead focus on types being involved.</para> </question> @@ -736,12 +736,12 @@ Tim</screen></td> if ((<emphasis role="red">(Comparable) a[...]</emphasis>).compareTo(...) < 0) { </programlisting> <para>This is an attempt casting an <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname> to <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname>. Since our <classname>Rectangle</classname> class does not yet implement the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname> interface this cast is bound to fail.</para> </answer> </qandaentry> @@ -757,10 +757,10 @@ if ((<emphasis role="red">(Comparable) a[...]</emphasis>).compareTo(...) < 0) <question> <para>Correct <xref linkend="sd1QandaArraysSortUnderstand"/> by implementing the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable</classname> interface in <classname>Rectangle</classname>. More precisely use the underlying type parameter <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html">Comparable<Rectangle></classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html">Comparable<Rectangle></classname>. Thus is an anticipation of upcoming <xref linkend="glo_Java"/> <link xlink:href="https://docs.oracle.com/javase/tutorial/java/generics">generics</link>.</para> @@ -769,7 +769,7 @@ if ((<emphasis role="red">(Comparable) a[...]</emphasis>).compareTo(...) < 0) <answer> <para>We implement the interface consisting only of one method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html#compareTo(T)">compareTo(T + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html#compareTo(T)">compareTo(T o)</methodname> with <code language="java">T</code> representing the type in question:</para> @@ -786,7 +786,7 @@ if ((<emphasis role="red">(Comparable) a[...]</emphasis>).compareTo(...) < 0) }</programlisting> <para>This solves the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/ClassCastException.html">ClassCastException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ClassCastException.html">ClassCastException</classname> runtime problem and sorts <classname>Rectangle</classname> instances by width:</para> @@ -864,7 +864,7 @@ for (final Rectangle n : rectangles) { <answer> <para>We extend our <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html#compareTo(T)">compareTo(T + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html#compareTo(T)">compareTo(T o)</methodname> implementation accounting in case of common width values:</para> @@ -935,12 +935,12 @@ ATM</screen></td> <title>Implementing flexible sorting</title> <para>Solution: Provide your own <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname>!</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname>!</para> <programlisting language="none">import java.util.Comparator; public class SortCaseInsensitive implements <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</link><<emphasis + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</link><<emphasis role="red">String</emphasis>> { <emphasis role="red">â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”┳â”â”â”â”â”â”â”â”â”â”â”â”›</emphasis> @Override <emphasis role="red">â–¼ â–¼</emphasis> @@ -954,7 +954,7 @@ public class SortCaseInsensitive implements <link <figure xml:id="sd1_fig_StringComparatorDemo"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> in action</title> <informaltable border="0"> @@ -982,14 +982,14 @@ System.out.println(new SortCaseInsensitive(). <co <callout arearefs="sd1_callout_StringComparatorDemo-1-co" xml:id="sd1_callout_StringComparatorDemo-1"> <para>Standard <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> comparison.</para> </callout> <callout arearefs="sd1_callout_StringComparatorDemo-2-co" xml:id="sd1_callout_StringComparatorDemo-2"> <para>Custom <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> evaluating <code language="java">"hello".compareTo(<emphasis role="red">"uk"</emphasis>)</code> behind the scenes.</para> </callout> @@ -998,7 +998,7 @@ System.out.println(new SortCaseInsensitive(). <co <figure xml:id="sd1_fig_StringSortIgnoreCase"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Case + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Case insensitive sort</classname></title> <informaltable border="0"> @@ -1008,11 +1008,11 @@ System.out.println(new SortCaseInsensitive(). <co <tr> <td valign="top"><programlisting language="none">final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</link>[] names = { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</link>[] names = { "UK", "quick", "hello", "sign", "ATM" }; -Arrays.<link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort</link>(names, <emphasis +Arrays.<link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort</link>(names, <emphasis role="red">new SortCaseInsensitive()</emphasis>); for (final String n: names) { @@ -1030,7 +1030,7 @@ UK</screen></td> <figure xml:id="sd1_fig_StringSortIgnoreCaseLambda"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Sort + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Sort descending by lambda expression</classname></title> <informaltable border="0"> @@ -1040,10 +1040,10 @@ UK</screen></td> <tr> <td valign="top"><programlisting language="none">final <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</link>[] names = { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</link>[] names = { "UK", "quick", "hello", "sign", "ATM" }; -Arrays.<link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort</link>(names, <emphasis +Arrays.<link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort</link>(names, <emphasis role="red">(a, b) -> b.compareTo(a)</emphasis>); <co linkends="sd1_callout_StringSortIgnoreCaseLambda-1" xml:id="sd1_callout_StringSortIgnoreCaseLambda-1-co"/> @@ -1067,7 +1067,7 @@ ATM</screen></td> comparator:</para> <programlisting language="none">public class SortDescending implements <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</link><String> { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</link><String> { @Override public int compare(final String <emphasis role="red">a</emphasis>, final String <emphasis role="red">b</emphasis>) { @@ -1107,16 +1107,16 @@ ATM</screen></td> <tip> <para>The <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort(T[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort(T[] a, Comparator<? super T> c)</methodname> method is your friend. It allows for passing a comparator instance as in the <link xlink:href="https://www.geeksforgeeks.org/arrays-sort-in-java-with-examples/#highlighter_983402">sort students by rollno</link> example. Thus define an appropriate SortByArea class implementing <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator<Rectangle></classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator<Rectangle></classname> and pass an instance of this class to <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort(T[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#sort(T%5B%5D,java.util.Comparator)">sort(T[] a, Comparator<? super T> c)</methodname>.</para> </tip> </question> @@ -1134,11 +1134,11 @@ ATM</screen></td> <para>The intended sorting requires a corresponding class implementing the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname> (Not <classname>Comparable</classname>!) interface:</para> <programlisting language="java">public class SortByArea implements <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Comparator.html">Comparator</classname><Rectangle> { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html">Comparator</classname><Rectangle> { @Override public int compare(Rectangle r1, Rectangle r2) { if (r1.width * r1.height == r2.width * r2.height) { @@ -1267,7 +1267,7 @@ Ascending by area: <qandaentry> <question> <para>Consider the following <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> array definitions:</para> <programlisting language="java">private static final String[] ADJECTIVES = { diff --git a/Doc/Sd1/languageFundamentals.xml b/Doc/Sd1/languageFundamentals.xml index 2309b6c9ecf4e85b1c4040015fdb3305a0645e50..8151a14a41e73aea23941a62d2fb4def3e294209 100644 --- a/Doc/Sd1/languageFundamentals.xml +++ b/Doc/Sd1/languageFundamentals.xml @@ -1364,7 +1364,7 @@ System.out.println(<emphasis role="red">c</emphasis>ount + ":" + <emphasis <td>yes</td> <td><code language="java"><methodname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/PrintStream.html#println(java.lang.String)">println</methodname></code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println(java.lang.String)">println</methodname></code> is a method's name but is no <xref linkend="glo_Java"/> keyword.</td> </tr> @@ -1848,7 +1848,7 @@ System.out.println("Result: " + i);</programlisting></td> expected assuming common rounding convention rules. Rounding does not happen unless you explicitly use methods like e.g. <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#round(double)">Math.round()</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#round(double)">Math.round()</methodname>.</para> </listitem> <listitem> @@ -1894,10 +1894,10 @@ System.out.println("Result: " + i);</programlisting></td> <td>byte</td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Byte.html#BYTES">1</link></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html#BYTES">1</link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Byte.MIN_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Byte.MIN_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:mo>-</m:mo> @@ -1912,7 +1912,7 @@ System.out.println("Result: " + i);</programlisting></td> </inlineequation></link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Byte.MAX_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Byte.MAX_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:msup> @@ -1933,7 +1933,7 @@ System.out.println("Result: " + i);</programlisting></td> <td>char</td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Byte.html#BYTES">2</link></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html#BYTES">2</link></td> <td><inlineequation> <m:math display="inline"> @@ -1942,7 +1942,7 @@ System.out.println("Result: " + i);</programlisting></td> </inlineequation></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Character.MAX_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Character.MAX_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:msup> @@ -1963,10 +1963,10 @@ System.out.println("Result: " + i);</programlisting></td> <td>short</td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Short.BYTES">2</link></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Short.BYTES">2</link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Short.MIN_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Short.MIN_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:mo>-</m:mo> @@ -1981,7 +1981,7 @@ System.out.println("Result: " + i);</programlisting></td> </inlineequation></link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Short.MAX_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Short.MAX_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:msup> @@ -2002,10 +2002,10 @@ System.out.println("Result: " + i);</programlisting></td> <td>int</td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.BYTES">4</link></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.BYTES">4</link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.MIN_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.MIN_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:mo>-</m:mo> @@ -2020,7 +2020,7 @@ System.out.println("Result: " + i);</programlisting></td> </inlineequation></link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.MAX_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.MAX_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:msup> @@ -2041,10 +2041,10 @@ System.out.println("Result: " + i);</programlisting></td> <td>long</td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Long.BYTES">8</link></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Long.BYTES">8</link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Long.MIN_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Long.MIN_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:mo>-</m:mo> @@ -2059,7 +2059,7 @@ System.out.println("Result: " + i);</programlisting></td> </inlineequation></link></td> <td><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Long.MAX_VALUE"><inlineequation> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Long.MAX_VALUE"><inlineequation> <m:math display="inline"> <m:mrow> <m:msup> @@ -2503,13 +2503,13 @@ System.out.println("Result: " + i);</programlisting></td> and <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> primitive data types within their corresponding <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Character.html">Character</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Character.html">Character</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Byte.html">Byte</classname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html">Byte</classname>, <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Short.html">Short</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Short.html">Short</classname> and <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname> classes. You may want to execute:</para> <programlisting language="java">System.out.println("int minimum:" + Integer.MIN_VALUE); @@ -2669,7 +2669,7 @@ Octal 35</screen></td> <title>Choose your output representation</title> <programlisting language="java">System.out.println("35 as Binary (Base 2): " + Integer.<link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html#toString(int,int)">toString</link>(35, 2)); + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#toString(int,int)">toString</link>(35, 2)); System.out.println("35 as Ternary (Base 3): " + Integer.toString(35, 3)); System.out.println("35 as Octal (Base 8): " + Integer.toString(35, 8)); System.out.println("35 as Hexadecimal (Base 16): " + Integer.toString(35, 16));</programlisting> @@ -2855,7 +2855,7 @@ Arrow value: 10173</screen> value directly:</para> <programlisting language="java">System.out.println(Character.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Character.html#toChars(int)">toChars(0x1f60e)</methodname>);</programlisting> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Character.html#toChars(int)">toChars(0x1f60e)</methodname>);</programlisting> </listitem> </orderedlist> </answer> @@ -2873,7 +2873,7 @@ System.out.println(10000000000<emphasis role="red">L</emphasis>); // o.K.: Usin System.out.println(10000000000 ); // Compile time error: Integer number // larger than 2147483647 or // 2^31 - 1, Integer.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</link>)</programlisting> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</link>)</programlisting> </figure> <figure xml:id="sd1_fig_literals"> @@ -3218,7 +3218,7 @@ Value 4: 29</screen> <figure xml:id="sd1_fig_javaLiteralsClass"> <title><xref linkend="glo_Java"/> <classname - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> and <code language="java">null</code> literals</title> <informaltable border="1"> @@ -5143,7 +5143,7 @@ System.out.println(value);</programlisting> </m:mrow> </m:math> </inlineequation> or <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Long.MAX_VALUE">Long.MAX_VALUE</varname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Long.MAX_VALUE">Long.MAX_VALUE</varname> - 1</td> <td align="right">2147483647</td> @@ -5163,7 +5163,7 @@ System.out.println(value);</programlisting> </m:mrow> </m:math> </inlineequation> or <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</varname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</varname></td> </tr> <tr> @@ -5184,7 +5184,7 @@ System.out.println(value);</programlisting> </m:mrow> </m:math> </inlineequation> or <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Long.MAX_VALUE">Long.MAX_VALUE</varname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Long.MAX_VALUE">Long.MAX_VALUE</varname></td> <td align="right">2147483647</td> @@ -5203,7 +5203,7 @@ System.out.println(value);</programlisting> </m:mrow> </m:math> </inlineequation> or <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</varname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</varname></td> </tr> </informaltable> @@ -5252,7 +5252,7 @@ System.out.println(value);</programlisting> </m:math> </inlineequation> seems to be equal to <code language="java">2 * (<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/constant-values.html#java.lang.Integer.MAX_VALUE">Integer.MAX_VALUE</link> + 1))</code> (why?) Joe's first attempt reads:</para> <programlisting language="java" linenumbering="numbered" @@ -5386,9 +5386,9 @@ Process finished with exit code 1</screen> <orderedlist> <listitem> <para>The constant <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</code>.<code + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</code>.<code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</code> already suggests we will not be able to increase its value while staying as an <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code>. @@ -5406,9 +5406,9 @@ _____________________________________ <para>This is the binary representation of the unintended result <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</code>.<code + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</code>.<code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MIN_VALUE">MIN_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MIN_VALUE">MIN_VALUE</code> due to an arithmetic overflow. The expression <code language="java">2 * (Integer.MAX_VALUE + 1)</code> then gives rise to a second overflow error:</para> @@ -5808,8 +5808,8 @@ System.out.println(2147483647 + 1L);</programlisting> <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-C">int</code> value <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>.<property - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</property>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>.<property + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">MAX_VALUE</property>. The plus operator in the first expression <code language="java">2147483647 + 1</code> acts on two operands of type <code language="java" @@ -5899,8 +5899,7 @@ System.out.println(2147483647 + 1L);</programlisting> IEEE representations: A given value will be approximated as close as possible.</para> - <para>Adding <code language="java">System.out.println(x - - y)</code> yields a value of -1.1102230246251565E-16 denoting the + <para>Adding <code language="java">System.out.println(x - y)</code> yields a value of -1.1102230246251565E-16 denoting the representational deviation of <code language="java">x</code> and <code language="java">y</code>.</para> @@ -5916,7 +5915,7 @@ final double b = 0.9; final double x = a + 0.1; final double y = b - 0.1; System.out.println(<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#abs(double)">Math.abs</link>(x - y) < 1.E-14);</programlisting> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#abs(double)">Math.abs</link>(x - y) < 1.E-14);</programlisting> <para>The last line represents the boolean expression <inlineequation> @@ -5961,10 +5960,10 @@ System.out.println(<link <programlisting language="java">try { int sum = Math.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#addExact(int,int)">addExact(2147480000, 2147480000)</link>; + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#addExact(int,int)">addExact(2147480000, 2147480000)</link>; System.out.println("sum = " + sum); } catch (<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/ArithmeticException.html">ArithmeticException</link> ex) { + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ArithmeticException.html">ArithmeticException</link> ex) { System.err.println("Problem: " + ex.getMessage()); }</programlisting> @@ -6025,7 +6024,7 @@ double g = 1. / 0; double difference = f - g; System.out.println("Difference: " + difference);</programlisting><screen>Difference: NaN</screen><parameter>Explanation: This represents a special <quote - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Double.html#NaN">not + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Double.html#NaN">not a number</quote> encoded value.</parameter></para> </listitem> </itemizedlist> @@ -6629,14 +6628,14 @@ System.out.println("A circle of radius " + radius + " will cover an area of " + <tip> <para>Consider the standard <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#PI">Math + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#PI">Math library</link>.</para> </tip> </question> <answer> <para>The solution is straightforward using <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#PI">Math.PI</link>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#PI">Math.PI</link>:</para> <programlisting language="java" linenumbering="numbered">double radius = 2.3; // Computing a circle's area System.out.println("A circle of radius " + radius + " will cover an area of " + diff --git a/Doc/Sd1/objectsClasses.xml b/Doc/Sd1/objectsClasses.xml index 3719f35b99a4708851074db5bd8b8762f661fe1b..849afc1f1bb6d8d5544a3508f44ef952ec161559 100644 --- a/Doc/Sd1/objectsClasses.xml +++ b/Doc/Sd1/objectsClasses.xml @@ -288,7 +288,7 @@ if (null == r) { <para><emphasis role="red">java.lang</emphasis>.String vs. <emphasis role="red">my.personal</emphasis>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname></para> </listitem> </itemizedlist> </figure> @@ -461,16 +461,16 @@ public class Q { <callout arearefs="sd1_fig_javaDotLangNoImportRequired-1.2-co" xml:id="sd1_fig_javaDotLangNoImportRequired-1.2"> <para>Classes belonging to the <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package> package are being imported automatically.</para> </callout> <callout arearefs="sd1_fig_javaDotLangNoImportRequired-2.2-co" xml:id="sd1_fig_javaDotLangNoImportRequired-2.2"> <para>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html">Scanner</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html">Scanner</classname> class belongs to the <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/package-summary.html">java.util</package> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/package-summary.html">java.util</package> package and must thus be imported.</para> </callout> @@ -1719,7 +1719,7 @@ public class Time { <programlisting language="java">boolean <co linkends="sd1_fig_typeSignatureDef-1" xml:id="sd1_fig_typeSignatureDef-1-co"/> <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​(String prefix, int toffset) <co + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​(String prefix, int toffset) <co linkends="sd1_fig_typeSignatureDef-2" xml:id="sd1_fig_typeSignatureDef-2-co"/> </programlisting> @@ -1811,7 +1811,7 @@ public class Time { <title>Defining method signatures</title> <programlisting language="java">boolean <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​<co + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​<co linkends="sd1_fig_typeSignatureDef-1.2" xml:id="sd1_fig_typeSignatureDef-1.2-co"/>(String prefix, int toffset) <co linkends="sd1_fig_typeSignatureDef-2.2" @@ -1922,7 +1922,7 @@ public class Time { <para>We start by the original method:</para> <programlisting language="java">boolean <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​(String prefix, int toffset) </programlisting> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#startsWith(java.lang.String,int)">startsWith</link>​(String prefix, int toffset) </programlisting> <para>Its signature may be represented by:</para> @@ -2326,47 +2326,47 @@ final double d = value; // widening, o.K.</programlisting> <informaltable border="0"> <tr> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-boolean-">print(boolean + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print-boolean-">print(boolean b)</methodname></td> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-char-">print(char + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(char)">print(char c)</methodname></td> </tr> <tr> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-char:A-">print(char[] + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(char:A)">print(char[] s)</methodname></td> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-double-">print(double + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(double)">print(double d)</methodname></td> </tr> <tr> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-float-">print(float + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(float)">print(float f)</methodname></td> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-int-">print(int + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(int)">print(int i)</methodname></td> </tr> <tr> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-long-">print(long + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(long)">print(long l)</methodname></td> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-java.lang.Object-">print(Object + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(java.lang.Object)">print(Object obj)</methodname></td> </tr> <tr> <td><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print-java.lang.String-">print(String + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(java.lang.String)">print(String s)</methodname></td> <td/> @@ -3817,11 +3817,11 @@ public class Driver { <para>This exercise is about using packages for resolving class name clashes. Usually you won't actually define a class String of your own next to <link - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">java.lang.String</link>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">java.lang.String</link>.</para> <para>Define your own <classname>String</classname> class internally using <link - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">java.lang.String</link>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">java.lang.String</link>. Provide a suitable constructor and a <methodname>public String toString()</methodname> method just returning the <quote>internal</quote> <classname>java.lang.String</classname> @@ -3846,8 +3846,8 @@ Hello 'John'</screen> <orderedlist> <listitem> <para>Use a <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance variable inside your private <classname>String</classname> class.</para> </listitem> @@ -3856,7 +3856,7 @@ Hello 'John'</screen> <para>Your class' constructor is bound to accept standard <xref linkend="glo_Java"/> string literals. Using <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">java.lang.String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">java.lang.String</classname> internally requires a fully qualified class name.</para> </listitem> @@ -3908,15 +3908,15 @@ public class String { <co linkends="sd1_callout_createStringClass-1.2" <callout arearefs="sd1_callout_createStringClass-1.3-co" xml:id="sd1_callout_createStringClass-1.2"> <para>Shadowing <xref linkend="glo_Java"/> <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>.</para> </callout> <callout arearefs="sd1_callout_createStringClass-2.2-co" xml:id="sd1_callout_createStringClass-2.2"> <para>Using a standard <xref linkend="glo_Java"/> <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance internally. Fully qualified class name required resolving potential name clash.</para> </callout> @@ -3925,8 +3925,8 @@ public class String { <co linkends="sd1_callout_createStringClass-1.2" xml:id="sd1_callout_createStringClass-3.2"> <para>Our constructor also accepts a standard <xref linkend="glo_Java"/> <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance.</para> </callout> @@ -3940,8 +3940,8 @@ public class String { <co linkends="sd1_callout_createStringClass-1.2" <callout arearefs="sd1_callout_createStringClass-4-co" xml:id="sd1_callout_createStringClass-4"> <para>Returning a <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance.</para> </callout> </calloutlist> @@ -3949,15 +3949,15 @@ public class String { <co linkends="sd1_callout_createStringClass-1.2" <para>There are basically two ways using <package>de.hdm_stuttgart.mi.sd1.tooling</package>.<classname>String</classname> and <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> in the same scope:</para> <glosslist> <glossentry> <glossterm>Fully qualify <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/package-summary.html">java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname>:</glossterm> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.<classname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>:</glossterm> <glossdef> <programlisting language="java">package de.hdm_stuttgart.mi; @@ -4024,7 +4024,7 @@ public class Main { xml:id="sd1_callout_createStringAnswer2-1"> <para>A <xref linkend="glo_Java"/> standard <package>java.lang</package>.<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> instance.</para> </callout> @@ -4612,27 +4612,27 @@ System.out.print(...)</programlisting> <callout arearefs="sd1_fig_understandingPrintln-1-co" xml:id="sd1_fig_understandingPrintln-1"> <para>Class <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/System.html">System</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html">System</classname> in package <package - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/package-summary.html">java.lang</package>.</para> </callout> <callout arearefs="sd1_fig_understandingPrintln-2-co" xml:id="sd1_fig_understandingPrintln-2"> <para>Class variable (static) <link - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/System.html#out">out</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">out</link> of type <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname> in class <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/System.html">System</classname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html">System</classname></para> </callout> <callout arearefs="sd1_fig_understandingPrintln-3-co" xml:id="sd1_fig_understandingPrintln-3"> <para>One of <link - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/PrintStream.html#i9">9 + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#i9">9 overloaded methods</link> in class <classname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html">PrintStream</classname>.</para> </callout> </calloutlist> </figure> @@ -4841,7 +4841,7 @@ public class <link desired method:</para> <programlisting language="java"><link - xlink:href="P/Sd1/leapYear/target/site/apidocs/de/hdm_stuttgart/sd1/leap/LeapYear.html#isLeapYear-int-">public static boolean isLeapYear(int year)</link> { + xlink:href="P/Sd1/leapYear/target/site/apidocs/de/hdm_stuttgart/sd1/leap/LeapYear.html#isLeapYear(int)">public static boolean isLeapYear(int year)</link> { if (year % 400 == 0) { // Every 400 years we do have a leap year. return true; } else if (year % 4 == 0 && 0 != year % 100) { // Every 4 years we do have a leap @@ -4856,7 +4856,7 @@ public class <link prefer compact code:</para> <programlisting language="java"><link - xlink:href="P/Sd1/leapYear/target/site/apidocs/de/hdm_stuttgart/sd1/leap/LeapYearCompact.html#isLeapYear-int-">public static boolean isLeapYear(int year)</link> { + xlink:href="P/Sd1/leapYear/target/site/apidocs/de/hdm_stuttgart/sd1/leap/LeapYearCompact.html#isLeapYear(int)">public static boolean isLeapYear(int year)</link> { return year % 400 == 0 || // Every 400 years we do have a leap year. year % 4 == 0 && 0 != year % 100; // Every 4 years we do have a leap year @@ -5080,7 +5080,7 @@ public static void doWhileSquareNumbers(final int limit) { <orderedlist> <listitem> <para>Consider the <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#sin-double-">sin(...)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#sin(double)">sin(...)</link> function. The documentation will tell you that the argument to sin(...) is expected to be in radians rather than common degree values from [0,360[ being expected on output. So you @@ -5101,7 +5101,7 @@ public static void doWhileSquareNumbers(final int limit) { <listitem> <para>Rounding the sine's value is the crucial part here. The function <link - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Math.html#round(double)">round()</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#round(double)">round()</link> is quite helpful. Consider the following example rounding 23.22365 to four decimal places:</para> @@ -5112,7 +5112,7 @@ public static void doWhileSquareNumbers(final int limit) { <listitem> <para><link - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Math.html#round(double)">round(232236.5)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#round(double)">round(232236.5)</link> results in 232237 (long).</para> </listitem> @@ -5361,7 +5361,7 @@ public static void setInterestRate(double z) { // Scope of variable "z" limited * @return The debt interest rate value. */ public static double <link - xlink:href="P/Sd1/interest/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/interest/Account.html#getDefaultInterestRate--">getDebtInterestRate()</link> { + xlink:href="P/Sd1/interest/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/interest/Account.html#getDefaultInterestRate()">getDebtInterestRate()</link> { return debtInterestRate; } @@ -5373,7 +5373,7 @@ public static double <link * the desired default interest rate value. */ public static void <link - xlink:href="P/Sd1/interest/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/interest/Account.html#setDefaultInterestRate-double-">setDebtInterestRate(double debtInterestRate)</link> { + xlink:href="P/Sd1/interest/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/interest/Account.html#setDefaultInterestRate(double)">setDebtInterestRate(double debtInterestRate)</link> { Account.debtInterestRate = debtInterestRate; }</programlisting> @@ -5393,7 +5393,7 @@ public static void <link }</programlisting> <remark>Using <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#pow(double,double)">Math.pow()</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#pow(double,double)">Math.pow()</link> for calculating <abbrev>e.g.</abbrev> <inlineequation> <m:math display="inline"> <m:msup> @@ -5420,7 +5420,7 @@ public static void <link </m:math> </inlineequation> rather than using a loop is actually a bad idea: <link - xlink:href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#pow(double,double)">Math.pow()</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#pow(double,double)">Math.pow()</link> internally using a power series expansion is expensive with respect to execution performance. Due to the integer exponential value a simple loop involving only multiplications @@ -6102,10 +6102,10 @@ System.out.println( </annotation> <para>Implementing <methodname - xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getGcd-long-long-">getGcd(</methodname>...):</para> + xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getGcd(long,long)">getGcd(</methodname>...):</para> <programlisting language="java">public static long <link - xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getCommonMultiple-long-long-">getGcd(long a, long b)</link> { + xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getCommonMultiple(long,long)">getGcd(long a, long b)</link> { // Following http://www.math.rutgers.edu/~greenfie/gs2004/euclid.html if (a < b) { // Swap the values of a and b @@ -6161,7 +6161,7 @@ System.out.println( </inlineequation>. Thus we have:</para> <programlisting language="java">public static long <link - xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getGcd-long-long-">getLeastCommonMultiple(long a, long b)</link> { + xlink:href="P/Sd1/Gcd/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/gcd/Math.html#getGcd(long,long)">getLeastCommonMultiple(long a, long b)</link> { final long gcd = getGcd(a, b); if (1 == gcd) { return a * b; @@ -6506,7 +6506,7 @@ Archive: .../.m2/repository/.../sd1/helper/0.9/helper-0.9.jar the <acronym>GCD</acronym> value:</para> <programlisting language="java"><link - xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#Fraction-long-long-">public Fraction(long numerator, long denominator)</link> { + xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#Fraction(long,long)">public Fraction(long numerator, long denominator)</link> { final long gcd = Math.getGcd(numerator, denominator); setNumerator(numerator / gcd); @@ -6589,7 +6589,7 @@ Archive: .../.m2/repository/.../sd1/helper/0.9/helper-0.9.jar </inlineequation>. We should thus implement:</para> <programlisting language="java">public Fraction <link - xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#mult-de.hdm_stuttgart.mi.sd1.fraction.Fraction-">mult(Fraction f)</link> { + xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#mult(de.hdm_stuttgart.mi.sd1.fraction.Fraction)">mult(Fraction f)</link> { final Fraction f1 = new Fraction(f.numerator, denominator), f2 = new Fraction(numerator, f.denominator); @@ -6604,7 +6604,7 @@ Archive: .../.m2/repository/.../sd1/helper/0.9/helper-0.9.jar large numbers:</para> <programlisting language="java">public Fraction <link - xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#add-de.hdm_stuttgart.mi.sd1.fraction.Fraction-">add(Fraction f)</link> { + xlink:href="P/Sd1/fraction/V2/target/site/apidocs/de/hdm_stuttgart/mi/sd1/fraction/Fraction.html#add(de.hdm_stuttgart.mi.sd1.fraction.Fraction)">add(Fraction f)</link> { final long gcd = Math.getGcd(denominator, f.denominator); @@ -6851,7 +6851,7 @@ static public long factorial(int n) { <para>Returning a long is sensible since even small argument values yield large factorials. <code language="java">long</code> <link - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/math/BigInteger.html">(currently!)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html">(currently!)</link> is the best (largest) choice among all <xref linkend="glo_Java"/> built-in integer types. Consider the following example code:</para> @@ -7602,9 +7602,9 @@ System.out.println(factorial(3));</programlisting> <tip> <para>The standard methods <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#currentTimeMillis--">currentTimeMillis()</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#currentTimeMillis()">currentTimeMillis()</link> and <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#nanoTime--">nanoTime</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#nanoTime()">nanoTime</link> allow for measuring method execution by means of subtracting time stamp values prior and after execution. <quote @@ -7919,7 +7919,7 @@ Ratio Recursive / Loop: 65554</screen></td> exp(double)</methodname> inside a class <package>Math</package> choosing a package of your choice. The name clash with the Java standard class <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">java.lang.Math</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">java.lang.Math</link> is intended: You'll learn how to resolve naming conflicts.</para> @@ -7960,7 +7960,7 @@ Ratio Recursive / Loop: 65554</screen></td> language="java">seriesLimit=8</code> terms and the corresponding values from the professional implementation <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#exp-double">java.lang.Math.exp</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#exp-double">java.lang.Math.exp</link> by calculating <inlineequation> <m:math display="inline"> <m:msup> @@ -8015,7 +8015,7 @@ Ratio Recursive / Loop: 65554</screen></td> <listitem> <para>You should only use basic arithmetic operations like +, - * and /. Do not use <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#pow-double-double-">Math.pow(double + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#pow(double,double)">Math.pow(double a, double b)</link> and friends! Their implementations use power series expansions as well and are designed for a different purpose like having fractional exponent @@ -8174,7 +8174,7 @@ Ratio Recursive / Loop: 65554</screen></td> <para>You may also view the <productname>Javadoc</productname> and the implementation of <link - xlink:href="P/Sd1/math/V1/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#exp-double-">double + xlink:href="P/Sd1/math/V1/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#exp(double)">double Math.exp(double)</link>. We may use the subsequent code snippet for testing and comparing our implementation:</para> @@ -8655,7 +8655,7 @@ e^3=19.412499999999998, difference=-0.67303692318767</screen> </m:mrow> </m:math> </inlineequation> using <varname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#PI">java.lang.Math.PI</varname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#PI">java.lang.Math.PI</varname>. Explain your results' accuracy for these arguments.</para> </question> @@ -8796,9 +8796,9 @@ sin(4 * PI)=-9143.306026012957, <emphasis role="bold">difference=-9143.306026012 </inlineequation>.</para> <para>You may also view the implementation of <link - xlink:href="P/Sd1/math/V2/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin-double-">double + xlink:href="P/Sd1/math/V2/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin(double)">double Math.sin(double)</link> along with its <link - xlink:href="P/Sd1/math/V2/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin-double-">Javadoc</link>.</para> + xlink:href="P/Sd1/math/V2/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin(double)">Javadoc</link>.</para> </answer> </qandaentry> </qandadiv> @@ -9826,7 +9826,7 @@ System.out.println("((1 + a) - b) - 1:" + (((one + a) - b) - one));</programlis arguments to this interval appropriately.</para> <para>Hint: The standard function <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#floor-double-">Math.rint(double)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#floor(double)">Math.rint(double)</methodname> could be helpful: It may turn e.g. 4.47 (<code language="java">double</code>) to 4 (<code language="java">long</code>).</para> @@ -9870,7 +9870,7 @@ System.out.println("((1 + a) - b) - 1:" + (((one + a) - b) - one));</programlis two rules. You may also view the <productname>Javadoc</productname> and the implementation of <link - xlink:href="P/Sd1/math/V4/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin-double-">double + xlink:href="P/Sd1/math/V4/target/site/apidocs/de/hdm_stuttgart/sd1/math/Math.html#sin(double)">double Math.sin(double)</link>.</para> </answer> </qandaentry> @@ -10667,7 +10667,7 @@ public static long getSum (int limit) { <para>For the current exercise we do not make use of this. Instead we implement <link - xlink:href="P/Sd1/summing/target/site/apidocs/de/hdm_stuttgart/sd1/sum/Summing.html#getSum-int-">Summing.getSum(...)</link> + xlink:href="P/Sd1/summing/target/site/apidocs/de/hdm_stuttgart/sd1/sum/Summing.html#getSum(int)">Summing.getSum(...)</link> by coding a loop:</para> <programlisting language="java">/** @@ -10779,7 +10779,7 @@ Actual :-32768</screen> fit into an <code language="java">int</code>. But <code language="java">limit * (limit + 1)</code> itself not yet divided by 2 may exceed <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code>. Since the multiplication happens prior to dividing by 2 we see this overflow error happen.</para> @@ -10961,8 +10961,8 @@ System.out.println(seconds + " seconds are equal to " + tPeriod <co <methodname>toString()</methodname> method within your <classname>Timeperiod</classname> class matching <classname - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname>'s + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname>'s method signature.</para> </callout> </calloutlist></td> @@ -11263,7 +11263,7 @@ public Timeperiod(final Timeperiod timeperiod) { ... }</programlisting> public void testAdditionMultiply() {</programlisting> <para>The current skeleton will yield a <classname - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NullPointerException.html">NullPointerException</classname> on test execution. After completing your implementation remove this <interfacename xlink:href="https://junit.org/junit5/docs/5.3.0/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> @@ -11801,7 +11801,7 @@ After call: <emphasis role="red">6</emphasis></screen></td> <tr> <td valign="top"><methodname role="bold" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html#push(E)">push(...)</methodname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html#push(E)">push(...)</methodname></td> <td valign="top"><para>Add object on top</para></td> @@ -11812,7 +11812,7 @@ After call: <emphasis role="red">6</emphasis></screen></td> <tr> <td valign="top"><methodname role="bold" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html#pop()">pop()</methodname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html#pop()">pop()</methodname></td> <td valign="top"><para>Read + remove topmost object</para></td> @@ -11823,7 +11823,7 @@ After call: <emphasis role="red">6</emphasis></screen></td> <tr> <td valign="top"><methodname role="bold" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html#peek()">top()</methodname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html#peek()">top()</methodname></td> <td valign="top"><para>Read topmost object</para></td> @@ -11834,7 +11834,7 @@ After call: <emphasis role="red">6</emphasis></screen></td> <tr> <td valign="top"><methodname role="bold" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html#empty()">empty()</methodname></td> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html#empty()">empty()</methodname></td> <td valign="top"><para><code language="java">true</code> if and only if stack is empty</para></td> @@ -11847,7 +11847,7 @@ After call: <emphasis role="red">6</emphasis></screen></td> <remark role="slideExclude">The <xref linkend="glo_JDK"/> implements a <methodname role="bold" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html#peek()">peek()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html#peek()">peek()</methodname> method having exactly the «original» stack <methodname>top()</methodname> method's semantic.</remark> </figure> @@ -12498,7 +12498,7 @@ System.out.println(northWest);</programlisting></td> <tip> <para>Provide an appropriate constructor among with suitable «internal» instance attributes and a corresponding <methodname - xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname> method.</para> </tip> </question> @@ -12571,7 +12571,7 @@ System.out.println(northWest);</programlisting></td> <para>For creating output texts like <abbrev>e.g.</abbrev> <code>north by west (315°)</code> we need a <methodname - xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()">toString()</methodname> method. Also adding the yet missing directions our final result looks like:</para> @@ -12637,7 +12637,7 @@ System.out.println(" Opposite: " + southWest.opposite());</programlisting></td> values()</methodname> being added by the compiler implicitly to any <code language="java">enum</code> class. See the method 's <methodname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#valueOf-java.lang.Class-java.lang.String-">valueOf()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#valueOf(java.lang.Class,java.lang.String)">valueOf()</methodname> explanation. It allows you to access the array of all instances of a given <code language="java">enum</code>.</para> @@ -12645,7 +12645,7 @@ System.out.println(" Opposite: " + southWest.opposite());</programlisting></td> <listitem> <para>The <methodname - xlink:href="https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Enum.html#ordinal()">ordinal()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Enum.html#ordinal()">ordinal()</methodname> method returns a given <code language="java">enum</code>'s instance index with respect to the order of appearance. Using the above values() method you can thus access any diff --git a/Doc/Sd1/statements.xml b/Doc/Sd1/statements.xml index 5a59cec5eaa173ae6e866045ee9111ee9a03fbd8..c314b8e3373979a3e81c9cce0de6ad121cee6193 100644 --- a/Doc/Sd1/statements.xml +++ b/Doc/Sd1/statements.xml @@ -869,9 +869,9 @@ public class App { <td valign="top"><screen>Enter a value:123 You entered 123</screen><para>See <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#nextBoolean()">nextBoolean()</methodname>, + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#nextBoolean()">nextBoolean()</methodname>, <methodname><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#nextByte()">nextByte()</link></methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#nextByte()">nextByte()</link></methodname> and friends.</para></td> </tr> </informaltable> @@ -1019,14 +1019,14 @@ You entered 123</screen><para>See <methodname final int pointsToAdd = 3; final int augmentedMark = <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#min(int,int)">Math.min</link>(maximumPoints, pointsReached + pointsToAdd); + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#min(int,int)">Math.min</link>(maximumPoints, pointsReached + pointsToAdd); System.out.println("New Result:" + augmentedMark); }</programlisting> <para>You will fully understand the above expression <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html">Math</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#min(int,int)">min(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html">Math</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#min(int,int)">min(...)</methodname> after finishing the <quote>Static Final Variables</quote> section of <xref linkend="bib_Kurniawan"/>.</para> </answer> @@ -1048,7 +1048,7 @@ You entered 123</screen><para>See <methodname <figure xml:id="sd1VideoUsingScannerClass"> <title>Using a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html">Scanner</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html">Scanner</classname> class collecting user input.</title> <mediaobject> @@ -1687,7 +1687,7 @@ switch(<emphasis role="red">day % 7</emphasis>) { <programlisting language="java">String month, season; ... // Since Java 7: <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</link> based <code + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</link> based <code language="java">case</code> labels switch(month) { case "March": case "April": case "May": @@ -1728,7 +1728,7 @@ Unknown day name 'July'</screen> <orderedlist> <listitem> <para>Starting from <xref linkend="glo_Java"/> 7 <classname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> based <code language="java">switch</code> statements are allowed.</para> </listitem> @@ -1736,8 +1736,8 @@ Unknown day name 'July'</screen> <listitem> <para>You may read strings into your application using <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html">Scanner</classname>.<methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#next()">next()</methodname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html">Scanner</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#next()">next()</methodname>.</para> </listitem> </orderedlist> </tip> @@ -2856,9 +2856,9 @@ for (int row = 0; row < numberOfRows; row++) { <co xml:id="sd1_callout_printTriangle-4"> <para>Print an individual character. Notice the presence of a <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print(java.lang.String)">print(....)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(java.lang.String)">print(....)</methodname> rather than a <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#println(java.lang.String)">println()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println(java.lang.String)">println()</methodname> method call. This way printing continues within a given line rather than breaking to a new one.</para> </callout> @@ -2868,12 +2868,12 @@ for (int row = 0; row < numberOfRows; row++) { <co <para>After each line we need a line break <code language="java">'\n'</code> for starting the next one using <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#println()">println()</methodname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println()">println()</methodname>. If you prefer explicit code you may use <package - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html">System</package>.<parameter - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">out</parameter>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html">System</package>.<parameter + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">out</parameter>. <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#print(char)">print('\n')</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#print(char)">print('\n')</methodname> instead.</para> </callout> </calloutlist> @@ -3105,7 +3105,7 @@ System.out.println("<emphasis role="red">###</emphasis>"); printing fixed numbers of space (<code>''</code>) characters using loop statements. The <classname>System</classname><code>.</code><property>out</property><code>.</code><methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</methodname> method as in <xref linkend="sd1QandaSquareNumberTableFormatted"/> allows for getting rid of these. As an example printing the tree's top @@ -3144,9 +3144,9 @@ System.out.println("<emphasis role="red">X</emphasis>"); </programlisting></ <para>Moreover starting with <xref linkend="glo_Java"/> 11 the <classname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">String</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname> class features a <methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#repeat(int)">repeat()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#repeat(int)">repeat()</methodname> method:</para> <informaltable border="1"> @@ -3171,7 +3171,7 @@ for (int i = 0; i < repetitions; i++) { <tr> <th>Using <methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#repeat(int)">repeat(int)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#repeat(int)">repeat(int)</methodname> instead</th> </tr> @@ -3263,15 +3263,15 @@ System.out.format("%"+ (numberOfRows + 1) + "s\n", "###");</programlisting> <listitem> <para>Read about using <classname>System</classname><code>.</code><property>out</property><code>.</code><methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format()</methodname> and <methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#repeat(int)">repeat(int)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#repeat(int)">repeat(int)</methodname> in the previous exercises solution.</para> </listitem> <listitem> <para>The <methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#indent(int)">indent(int)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#indent(int)">indent(int)</methodname> method allows for indenting multi line blocks:</para> <informaltable border="1"> @@ -3606,11 +3606,11 @@ System.out.println("<emphasis role="red">[___]</emphasis>"); <para>Similar to the previous exercise <xref linkend="sd1QandaXmasTree"/> this time we replace all inner loops by<classname> using </classname><classname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">String</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#indent(int)">indent()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#indent(int)">indent()</methodname> and <classname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html">String</classname>.<methodname - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#repeat(int)">repeat()</methodname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html">String</classname>.<methodname + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#repeat(int)">repeat()</methodname>. This variant's full source code is on offer at <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/Doc/Sd1/Ref/Statements/MoreFunXmasTree/src/main/java/de/hdm_stuttgart/mi/sd1/XmasUsingFormat.java">XmasUsingFormat.java</link>.</para> @@ -3791,11 +3791,11 @@ System.out.print("[___]".indent(numberOfRowGroups + 1));</programlisting> xlink:href="https://docs.oracle.com/javase/tutorial/java/data/numberformat.html">Formatting Numeric Print Output</link> and learn how to style numeric output: Use <methodname><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">System.out</link>.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format</link>(...%nd...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">System.out</link>.<link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#format(java.lang.String,java.lang.Object...)">format</link>(...%nd...)</methodname> instead of <methodname><link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#out">System.out</link>.<link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/PrintStream.html#println()">println</link>(...)</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#out">System.out</link>.<link + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/PrintStream.html#println()">println</link>(...)</methodname> statements</para> </tip></para> </question> @@ -3922,7 +3922,7 @@ System.out.format("Start:<emphasis role="red">%5d</emphasis>:End", <emphasis xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/-/blob/master/Doc/Sd1/Ref/Statements/MultSimpleHtmlTable/src/main/java/de/hdm_stuttgart/mi/sd1/App.java">App.java</link>. This solution uses both <xref linkend="glo_Java"/> 15 multi line blocks and the String.<link - xlink:href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#indent(int)">indent(..)</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html#indent(int)">indent(..)</link> method.</para> </answer> </qandaentry> @@ -3978,7 +3978,7 @@ System.out.format("Start:<emphasis role="red">%5d</emphasis>:End", <emphasis <para>Having integer values of differing lengths you have to consider right justified output. The integer <link - xlink:href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Formatter.html#syntax">format + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Formatter.html#syntax">format specifier</link> <code>%...d</code> is your friend here. The subsequent example prints four integer values in right justified style within output fields of common @@ -4790,7 +4790,7 @@ for (int i = 1; i < 50; i++) { </m:math> </inlineequation> equals 6227020800 which is ways beyond <code - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#MAX_VALUE">Integer.MAX_VALUE</code> == 2147483647 giving rise to a (silent) arithmetic overflow. But even declaring our variable <code language="java">product</code> of type <code @@ -4822,7 +4822,7 @@ for (int i = 1; i < 50; i++) { <para>This time <code>20! == 2432902008176640000</code> is the last correct value being smaller than <code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Long.html#MAX_VALUE">Long.MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Long.html#MAX_VALUE">Long.MAX_VALUE</code> == 9223372036854775807.</para> <para>Fortunately we have another option. Consider an @@ -5416,7 +5416,7 @@ import java.util.Random; // and number of tries. final int randomValue = new Random() // Selecting a pseudo random value - .<link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Random.html#nextInt(int)">nextInt(11)</link>; // between 0 and 10 (inclusive). + .<link xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Random.html#nextInt(int)">nextInt(11)</link>; // between 0 and 10 (inclusive). // ToDo: complete the implementation }</programlisting> diff --git a/Doc/Sd1/streams.xml b/Doc/Sd1/streams.xml index f10787b9945e5e70a9af307065b5d650092eced3..2287b0f0893ff7661a802b8a6f68e97bb0f56429 100644 --- a/Doc/Sd1/streams.xml +++ b/Doc/Sd1/streams.xml @@ -70,7 +70,7 @@ <listitem> <para>Given the name of an existing file you may create an instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html">BufferedReader</classname>:</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/BufferedReader.html">BufferedReader</classname>:</para> <programlisting language="java">final FileReader fileReader = new FileReader(inputFileName); final BufferedReader inputBufferedReader = new BufferedReader(fileReader);</programlisting> @@ -78,20 +78,20 @@ final BufferedReader inputBufferedReader = new BufferedReader(fileReader);</prog <listitem> <para>You will have to deal with possible <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileNotFoundException.html">FileNotFoundException</classname> problems providing meaningful error messages.</para> </listitem> <listitem> <para>The <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html">BufferedReader</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/BufferedReader.html">BufferedReader</classname> class provides a method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html#readLine--">readLine()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/BufferedReader.html#readLine()">readLine()</methodname> allowing to access a given file's content line by line.</para> <caution> <para>Even if a file exists you have my encounter <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/IOException.html">IOException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html">IOException</classname> problems being related to <acronym>i.e.</acronym> missing permissions.</para> </caution> @@ -124,7 +124,7 @@ public void testReadMissingFile() throws FileNotFoundException, IOException { <para>Notice the second test which will only succeed if a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/FileNotFoundException.html">FileNotFoundException</classname> is being thrown.</para> </answer> </qandaentry> @@ -224,16 +224,16 @@ public void testReadMissingFile() throws FileNotFoundException, IOException { being able to and count characters, words and lines of a single input file. Instances of this class may be initialized from a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html">BufferedReader</classname>.</para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/BufferedReader.html">BufferedReader</classname>.</para> <para>Write corresponding tests.</para> </listitem> <listitem> <para>You may create an instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/BufferedReader.html">BufferedReader</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/BufferedReader.html">BufferedReader</classname> from <link - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#in">System.in</link> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/System.html#in">System.in</link> via:</para> <programlisting language="java">new BufferedReader(new InputStreamReader(System.in))</programlisting> diff --git a/Doc/Sd1/workingWithNumbers.xml b/Doc/Sd1/workingWithNumbers.xml index 1c192b2160f29175c815618416f2fd15ba7c8b7f..2ba8a9b41743161ca056d8820f3c03a641df3f6d 100644 --- a/Doc/Sd1/workingWithNumbers.xml +++ b/Doc/Sd1/workingWithNumbers.xml @@ -17,7 +17,7 @@ <figure xml:id="sd1_numbers_fig_stack"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Stack.html">Stack</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Stack.html">Stack</classname> of integer values</title> <informaltable border="0"> @@ -54,15 +54,15 @@ while (!values.empty()) { <itemizedlist> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">public + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">public boolean equals</methodname>(<classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html">Object</classname> obj)</para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#hashCode()">public + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()">public int hashCode()</methodname></para> </listitem> </itemizedlist> @@ -161,14 +161,14 @@ int iPrimitiveFromInteger = <co linkends="sd1_numbers_fig_conventional-3" <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-2-co" xml:id="sd1_numbers_fig_boxingAndUnboxing-2"> <para>Creating an instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname> by means of boxing.</para> </callout> <callout arearefs="sd1_numbers_fig_boxingAndUnboxing-3-co" xml:id="sd1_numbers_fig_boxingAndUnboxing-3"> <para>Assigning an <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>'s value to a primitive <code language="java">int</code> by means of unboxing.</para> </callout> @@ -184,19 +184,19 @@ int iPrimitiveFromInteger = <co linkends="sd1_numbers_fig_conventional-3" <callout arearefs="sd1_numbers_fig_conventional-2-co" xml:id="sd1_numbers_fig_conventional-2"> <para>Creating a new instance of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname> using the class method <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#valueOf-int-">Integer + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#valueOf(int)">Integer valueOf​(int i)</methodname>.</para> </callout> <callout arearefs="sd1_numbers_fig_conventional-3-co" xml:id="sd1_numbers_fig_conventional-3"> <para>Assigning an <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>'s + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname>'s value to a primitive <code language="java">int</code> using the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#intValue--">int + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#intValue()">int intValue()</methodname> instance method.</para> </callout> </calloutlist></td> @@ -315,7 +315,7 @@ Double d = intValue;</programlisting> <figure xml:id="sd1_numbers_fig_parseIntegerString"> <title>Parsing <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html">Integer</classname> user input</title> <informaltable border="0"> @@ -364,14 +364,14 @@ not an integer.</screen></td> <listitem> <para>The <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html#nextLine--">Scanner.nextLine()</methodname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html#nextLine()">Scanner.nextLine()</methodname> method does not throw a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NumberFormatException.html">NumberFormatException</classname>. + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NumberFormatException.html">NumberFormatException</classname>. Thus the only way to enter the <code language="java">catch {...}</code> clause is by executing of <code language="java">Integer.parseInt(userInput)</code> yielding a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NumberFormatException.html">NumberFormatException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NumberFormatException.html">NumberFormatException</classname> . But this execution happens <emphasis>after</emphasis> assigning <code language="java">userInput = scanner.nextLine()</code>.</para> @@ -440,39 +440,39 @@ System.out.println("Value: " + value)</programlisting><screen>Exception in threa <td valign="top"><itemizedlist> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Byte.html#parseByte-java.lang.String-">parseByte()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Byte.html#parseByte(java.lang.String)">parseByte()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Short.html#parseShort-java.lang.String-">parseShort()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Short.html#parseShort(java.lang.String)">parseShort()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#parseInt-java.lang.String-">parseInt()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Integer.html#parseInt(java.lang.String)">parseInt()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Long.html#parseLong-java.lang.String-">parseLong()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Long.html#parseLong(java.lang.String)">parseLong()</methodname></para> </listitem> </itemizedlist></td> <td valign="top"><itemizedlist> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Float.html#parseFloat-java.lang.String-">parseFloat()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Float.html#parseFloat(java.lang.String)">parseFloat()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Double.html#parseDouble-java.lang.String-">parseDouble()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Double.html#parseDouble(java.lang.String)">parseDouble()</methodname></para> </listitem> <listitem> <para><methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Boolean.html#parseBoolean-java.lang.String-">parseBoolean()</methodname></para> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Boolean.html#parseBoolean(java.lang.String)">parseBoolean()</methodname></para> </listitem> </itemizedlist></td> </tr> @@ -496,7 +496,7 @@ System.out.println(Short.parseShort("32768"));</programlisting> <answer> <para><code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Short.html#MAX_VALUE">MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Short.html#MAX_VALUE">MAX_VALUE</code> for primitive type <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> is <inlineequation> @@ -522,7 +522,7 @@ System.out.println(Short.parseShort("32768"));</programlisting> </inlineequation> which equals 32767. Thus 32786 is no longer assignment compatible. So the first line will execute well but the second one yields a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NumberFormatException.html">NumberFormatException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NumberFormatException.html">NumberFormatException</classname> at runtime :</para> <screen>Value:32767 @@ -588,7 +588,7 @@ B: 11</screen> <answer> <para>Hexadecimal representation uses a radix value of 16 to be passed to <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Short.html#parseShort-java.lang.String-int-">short + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Short.html#parseShort(java.lang.String,int)">short parseShort​(String s, int radix)</methodname>:</para> <programlisting language="java">/** @@ -607,7 +607,7 @@ public static short getHexadecimal(final String input) { <answer> <para><code language="java" - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Short.html#MAX_VALUE">MAX_VALUE</code> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Short.html#MAX_VALUE">MAX_VALUE</code> for primitive type <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1-100-B">short</code> is <inlineequation> @@ -633,7 +633,7 @@ public static short getHexadecimal(final String input) { </inlineequation> which equals 32767. Thus 32786 is no longer assignment compatible. So the first line will execute well but the second one yields a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/NumberFormatException.html">NumberFormatException</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/NumberFormatException.html">NumberFormatException</classname> at runtime :</para> <screen>Value:32767 @@ -653,7 +653,7 @@ Exception in thread "main" java.lang.NumberFormatException: <figure xml:id="sd1_numbers_fig_locale"> <title>Excerpt from <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Locale.html">java.util.Locale</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html">java.util.Locale</classname></title> <para>A Locale object represents a specific geographical, political, or cultural region.</para> @@ -669,7 +669,7 @@ Exception in thread "main" java.lang.NumberFormatException: <figure xml:id="sd1_numbers_fig_localeProperties"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Locale.html">Locale</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html">Locale</classname> properties</title> <itemizedlist> @@ -693,7 +693,7 @@ Exception in thread "main" java.lang.NumberFormatException: <figure xml:id="sd1_numbers_fig_constructNumberFormat"> <title>Get a <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/text/NumberFormat.html">NumberFormat</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/NumberFormat.html">NumberFormat</classname> instance</title> <informaltable border="0"> @@ -731,7 +731,7 @@ System.out.println(weirdFormatter.format(12345.678));</programlisting> <qandaset defaultlabel="qanda" xml:id="sd1_numbers_qanda_getAvailableLocales"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Locale.html">Locale</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html">Locale</classname> definitions</title> <qandadiv> @@ -739,7 +739,7 @@ System.out.println(weirdFormatter.format(12345.678));</programlisting> <question> <para>Each <xref linkend="glo_JRE"/> ships with a set of available <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Locale.html">Locale</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html">Locale</classname> definitions. Write a simple program to get the following list:</para> @@ -754,7 +754,7 @@ Locale: English(en_GB)</screen> <tip> <para>Read the documentation of <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Locale.html">Locale</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html">Locale</classname> to find appropriate methods.</para> </tip> </question> @@ -773,7 +773,7 @@ for (final Locale l: Locale.getAvailableLocales()) { xml:id="sd1_numbers_qanda_formatIntDoubleDate"> <title>Formatting <code language="java">int</code>, <code language="java">double</code> and <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/time/LocalDate.html">LocaleDate</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/LocalDate.html">LocaleDate</classname></title> <qandadiv> <qandaentry> @@ -845,9 +845,9 @@ December 22, 2024 <itemizedlist> <listitem> <para>Read the <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/text/NumberFormat.html">NumberFormat</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/NumberFormat.html">NumberFormat</classname> documentation and its <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/text/NumberFormat.html#getInstance-java.util.Locale-">static + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/NumberFormat.html#getInstance(java.util.Locale)">static NumberFormat getInstance(Locale inLocale)</methodname> in particular. Also note its multiply overloaded <methodname>String format(...)</methodname> methods partly @@ -856,15 +856,15 @@ December 22, 2024 <listitem> <para>Regarding dates you may want to consider <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/time/format/DateTimeFormatter.html">DateTimeFormatter</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html">DateTimeFormatter</classname> providing the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/time/format/DateTimeFormatter.html#ofLocalizedDate-java.time.format.FormatStyle-">static + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html#ofLocalizedDate(java.time.format.FormatStyle)">static DateTimeFormatter ofLocalizedDate(FormatStyle dateStyle)</methodname> method. Then read about class <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/time/format/FormatStyle.html">FormatStyle</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/FormatStyle.html">FormatStyle</classname> and the <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/time/format/DateTimeFormatter.html#withLocale-java.util.Locale-">DateTimeFormatter + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html#withLocale(java.util.Locale)">DateTimeFormatter withLocale​(Locale locale)</methodname> method.</para> </listitem> </itemizedlist> @@ -964,7 +964,7 @@ System.out.println(result);</programlisting> <figure xml:id="sd1_numbers_fig_usingBigDecimal"> <title>Using <classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/math/BigDecimal.html">BigDecimal</classname></title> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigDecimal.html">BigDecimal</classname></title> <programlisting language="java">final BigDecimal zero_dot_99 = new BigDecimal("0.99"); final BigDecimal zero_dot_1 = new BigDecimal("0.1"); @@ -981,7 +981,7 @@ System.out.println(result);</programlisting> <figure xml:id="sd1_numbers_fig_usingBigDecimalFeatures"> <title><classname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/math/BigDecimal.html">BigDecimal</classname> + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigDecimal.html">BigDecimal</classname> features</title> <itemizedlist> @@ -1009,7 +1009,7 @@ System.out.println(result);</programlisting> <figure xml:id="sd1_numbers_fig_random"> <title>Using <methodname - xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#random--">static + xlink:href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html#random()">static double random​()</methodname></title> <programlisting language="java">for (int i = 0; i < 10; i++) {