From 057d3a31cb08c0325951f3f9fe0f2b04c306dd21 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Wed, 7 Feb 2024 07:11:33 +0100 Subject: [PATCH] Better code error explanation --- Doc/Sd1/Appendix/Exam/2023/Winter/exam.xml | 84 +++++++++++++++++----- 1 file changed, 65 insertions(+), 19 deletions(-) diff --git a/Doc/Sd1/Appendix/Exam/2023/Winter/exam.xml b/Doc/Sd1/Appendix/Exam/2023/Winter/exam.xml index 5b8cfbf8a..247e9a9c9 100644 --- a/Doc/Sd1/Appendix/Exam/2023/Winter/exam.xml +++ b/Doc/Sd1/Appendix/Exam/2023/Winter/exam.xml @@ -107,7 +107,15 @@ <answer> <para>There are errors:</para> - <programlisting language="java">/** + <informaltable border="1"> + <tr> + <th>Erroneous code</th> + + <th>Correct code</th> + </tr> + + <tr> + <td valign="top"><programlisting language="java">/** * Summing up an int array's values * * @param values An array of int values @@ -116,35 +124,54 @@ public static int sum(int[] values) { int sum; <co linkends="sd1_exam_2023_winter_sumErrors-1" - xml:id="sd1_exam_2023_winter_sumErrors-1-co"/> + xml:id="sd1_exam_2023_winter_sumErrors-1-co"/> for (<co linkends="sd1_exam_2023_winter_sumErrors-2" - xml:id="sd1_exam_2023_winter_sumErrors-2-co"/> i = 0; i <=<co - linkends="sd1_exam_2023_winter_sumErrors-3" - xml:id="sd1_exam_2023_winter_sumErrors-3-co"/> values.length; i++) { + xml:id="sd1_exam_2023_winter_sumErrors-2-co"/> i = 0; i <=<co + linkends="sd1_exam_2023_winter_sumErrors-3" + xml:id="sd1_exam_2023_winter_sumErrors-3-co"/> values.length; i++) { + sum += values[i]; + } + return sum; +}</programlisting></td> + + <td valign="top"><programlisting language="java">/** + * Summing up an int array's values + * + * @param values An array of int values + * @return The sum of all array values + */ +public static int sum(int[] values) { + + int sum = 0; + + for (int i = 0; i < values.length; i++) { sum += values[i]; } return sum; -}</programlisting> +}</programlisting></td> + </tr> + </informaltable> <calloutlist> <callout arearefs="sd1_exam_2023_winter_sumErrors-1-co" xml:id="sd1_exam_2023_winter_sumErrors-1"> - <para>Missing initialization <code language="java">int sum = + <para>Missing initialization <code language="java">sum = 0</code>.</para> </callout> <callout arearefs="sd1_exam_2023_winter_sumErrors-2-co" xml:id="sd1_exam_2023_winter_sumErrors-2"> - <para>Missing type i.e. <code language="java">int i = - 0</code>;</para> + <para>Missing type i.e. <code language="java">int + i</code>.</para> </callout> <callout arearefs="sd1_exam_2023_winter_sumErrors-3-co" xml:id="sd1_exam_2023_winter_sumErrors-3"> <para>Off by one error: Last array index being <code language="java">values.length - 1</code> requires <code - language="java">i < values.length</code>.</para> + language="java">i < values.length</code> avoiding an + <classname>ArrayIndexOutOfBoundsException</classname>.</para> </callout> </calloutlist> </answer> @@ -174,33 +201,52 @@ public static int sum(int[] values) { </question> <answer> - <para>Every expression of type byte is bounded by <code - language="java">Byte.MAX_VALUE</code>. The expression <code - language="java">b <= Byte.MAX_VALUE</code> is thus always + <para>Every variable of type byte is bounded by <code + language="java">Byte.MAX_VALUE</code>. The boolean expression + <code language="java">b <= Byte.MAX_VALUE</code> is thus always true.</para> - <para>A closer look on the operator ++ acting on a byte variable - reveals a cycle passing between <code - language="java">Byte.MIN_VALUE</code> and <code - language="java">Byte.MAX_VALUE</code>:</para> + <para>An even closer look reveals <code language="java">b++</code> + oscillating between its lower <code + language="java">Byte.MIN_VALUE</code> and upper <code + language="java">Byte.MAX_VALUE</code> bound:</para> <informaltable border="1"> + <colgroup width="36%"/> + + <colgroup width="12%"/> + + <colgroup width="52%"/> + <tr> <th>Code</th> <th>Output</th> + + <th>Explanation</th> </tr> <tr> <td valign="top"><programlisting language="java">byte b = Byte.MAX_VALUE - 1; System.out.println(b++); System.out.println(b++); +System.out.println(b++); +... System.out.println(b++);</programlisting></td> <td valign="top"><screen> 126 - 127 + <emphasis role="red">127</emphasis> -128 --127</screen></td> +-127 + ... + <emphasis role="red">127</emphasis></screen></td> + + <td valign="top"><screen> +Byte.MAX_VALUE +Byte.MIN_VALUE + + +Byte.MAX_VALUE</screen></td> </tr> </informaltable> -- GitLab