Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
GoikLectures
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Goik Martin
GoikLectures
Commits
d2c71a53
Commit
d2c71a53
authored
1 year ago
by
Goik Martin
Browse files
Options
Downloads
Patches
Plain Diff
Summer 2023 Exam
parent
3e1fca40
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Doc/Sd1/Appendix/Exam/2023/Summer/exam.xml
+255
-0
255 additions, 0 deletions
Doc/Sd1/Appendix/Exam/2023/Summer/exam.xml
Doc/Sd1/Appendix/appendix.xml
+3
-0
3 additions, 0 deletions
Doc/Sd1/Appendix/appendix.xml
with
258 additions
and
0 deletions
Doc/Sd1/Appendix/Exam/2023/Summer/exam.xml
0 → 100644
+
255
−
0
View file @
d2c71a53
<?xml version="1.0" encoding="UTF-8"?>
<section
version=
"5.0"
xml:id=
"sd1_exam_2023_summer"
xml:lang=
"en"
xmlns=
"http://docbook.org/ns/docbook"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xila=
"http://www.w3.org/2001/XInclude/local-attributes"
xmlns:xi=
"http://www.w3.org/2001/XInclude"
xmlns:trans=
"http://docbook.org/ns/transclusion"
xmlns:svg=
"http://www.w3.org/2000/svg"
xmlns:m=
"http://www.w3.org/1998/Math/MathML"
xmlns:html=
"http://www.w3.org/1999/xhtml"
xmlns:db=
"http://docbook.org/ns/docbook"
>
<title>
SD1 examination summer 2023
</title>
<section
xml:id=
"sd1_exam_2023_summer_task1"
>
<title>
Implementing tasks
</title>
<section
xml:id=
"sd1_exam_2023_summer_task1_preparation"
>
<title>
Preparation
</title>
<orderedlist>
<listitem>
<para>
Download and unzip the above file
<filename>
exam.zip
</filename>
. You should see a directory
»
<filename>
Exam
</filename>
« containing a
<filename>
pom.xml
</filename>
file.
</para>
</listitem>
<listitem>
<para>
Open this project in your
<productname>
IDEA
</productname>
IDE
by selecting the
<filename>
Exam/pom.xml
</filename>
file.
</para>
</listitem>
</orderedlist>
</section>
<section
xml:id=
"sd1_exam_2023_summer_task1_task"
>
<title>
Task
</title>
<qandaset
defaultlabel=
"qanda"
xml:id=
"sd1_exam_2023_summer_task1Qanda"
>
<qandadiv>
<qandaentry>
<question>
<para>
Open the
<filename>
Readme.md
</filename>
file in your
project's root. It contains all necessary instructions for
solving the implementation tasks.
</para>
</question>
<answer>
<para>
Solution see
<link
xlink:href=
"https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/-/tree/master/Klausuren/Sd1/2023summer/Solve"
>
summer
2023 exam
</link>
.
</para>
</answer>
</qandaentry>
</qandadiv>
</qandaset>
</section>
<section
xml:id=
"sd1_exam_2023_summer_task1Caveats"
>
<title>
Caveats
</title>
<itemizedlist>
<listitem>
<para>
When approaching end of examination check your input for
completeness prior to being automatically logged out by the system.
Remember: There is 120 minutes for the examination and another 5
minutes to check for completeness.
</para>
</listitem>
<listitem>
<para>
Projects residing just on your local workstation's file system
cannot be recovered after finishing the exam.
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section
xml:id=
"sd1_exam_2023_summer_task2"
>
<title>
switch versus if ... else if ... else
</title>
<qandaset
defaultlabel=
"qanda"
xml:id=
"sd1_exam_2023_summer_task3Qanda"
>
<qandadiv>
<qandaentry>
<question>
<para>
Consider a method
<methodname>
computeItemCount()
</methodname>
of following
signature:
</para>
<programlisting
language=
"none"
>
static int computeItemCount() {...}
</programlisting>
<para>
This method will be called by two different implementations
of another method
<methodname>
getScore()
</methodname>
:
</para>
<informaltable
border=
"1"
>
<tr>
<th>
Implementation by
<code>
switch
</code></th>
<th>
Implementation by
<code>
if ... else if ...
else
</code></th>
</tr>
<tr>
<td
valign=
"top"
><programlisting
language=
"java"
>
public static int getScore() {
switch (computeItemCount()){
case 1: return 20;
case 3: return 50;
default: return 0;
}
}
</programlisting></td>
<td
valign=
"top"
><programlisting
language=
"java"
>
public static int getScore() {
if (1 == computeItemCount()) {
return 20;
} else if (3 == computeItemCount()) {
return 50;
} else {
return 0;
}
}
</programlisting></td>
</tr>
</informaltable>
<para>
An experienced programmer claims these two implementations
possibly return different results when executing
<methodname>
getScore()
</methodname>
. Is she right?
<emphasis
role=
"red"
>
Explain
</emphasis>
your answer.
</para>
<tip>
<para>
Consider possible side effects of calling
<methodname>
computeItemCount()
</methodname>
and provide an
example.
</para>
</tip>
</question>
<answer>
<para>
Consider:
</para>
<programlisting
language=
"java"
>
public class X {
private static int itemCount = 2;
static int computeItemCount() {return itemCount++;}
...
}
</programlisting>
<para>
On a fresh start calling
<methodname>
computeItemCount()
</methodname>
for the first time
will return the current value 2 of our variable
<code
language=
"java"
>
itemCount
</code>
.
</para>
<para>
The
<code
language=
"java"
>
switch
</code>
implementation will
match its default and thus return 0.
</para>
<para>
On contrary the
<code>
if ... else if ... else
</code>
implementation will call
<methodname>
computeItemCount()
</methodname>
two times:
</para>
<orderedlist>
<listitem>
<para>
The first if
<code>
(1 == computeItemCount())
</code>
fails since 1 != 2. This results in incrementing
<code
language=
"java"
>
itemCount
</code>
by 1 to the new value
3.
</para>
</listitem>
<listitem>
<para>
Now the else if
<code
language=
"java"
>
(3 ==
computeItemCount())
</code>
clause succeeds. Thus
<methodname>
getScore()
</methodname>
returns 50.
</para>
</listitem>
</orderedlist>
<para>
So the
<code
language=
"java"
>
switch
</code>
statement
implementing a jump table differs from
<code>
if ... else if
</code>
in definitely calling
<code
language=
"java"
>
computeItemCount()
</code>
only once.
</para>
</answer>
</qandaentry>
</qandadiv>
</qandaset>
</section>
<section
xml:id=
"sd1_exam_2023_summer_task3"
>
<title>
Exception handling
</title>
<qandaset
defaultlabel=
"qanda"
xml:id=
"sd1_exam_2023_summer_task2Qanda"
>
<qandadiv>
<qandaentry>
<question>
<para>
Consider the following snippet:
</para>
<programlisting
language=
"java"
>
Object o = ...;
int a = ...;
...
try {
String s = (String) o; // May throw a
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ClassCastException.html"
>
ClassCastException
</link>
int c = 4 / a; // May throw an
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ArithmeticException.html"
>
ArithmeticException
</link>
} catch (
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ClassCastException.html"
>
ClassCastException
</link>
e) {
System.err.println(e.getMessage());
} catch (
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ArithmeticException.html"
>
ArithmeticException
</link>
e) {
System.err.println(e.getMessage());
}
</programlisting>
<para>
Facilitate the above code and
<emphasis
role=
"red"
>
explain
</emphasis>
why your simpler implementation
always and under all circumstances produces an identical runtime
result.
</para>
<tip>
<itemizedlist>
<listitem>
<para>
Both
<code
language=
"java"
>
catch
</code>
clauses
contain the same text.
</para>
</listitem>
<listitem>
<para>
Search the inheritance hierarchy for a common ancestor
class and consider the
<methodname>
getMessage()
</methodname>
method. Where is it actually being defined?
</para>
</listitem>
</itemizedlist>
</tip>
</question>
<answer>
<para>
Both
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ClassCastException.html"
>
ClassCastException
</link>
and
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ArithmeticException.html"
>
ArithmeticException
</link>
are being derived from their common parent
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/RuntimeException.html"
>
RuntimeException
</link>
.
All three classes share the common
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/Throwable.html"
>
Throwable
</link>
#
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/Throwable.html#getMessage()"
>
getMessage()
</link>
method by inheritance without redefining it.
</para>
<para>
Our two
<code>
catch
</code>
clauses may thus be combined into
one:
</para>
<programlisting
language=
"java"
>
...
try {
String s = (String) o; // May throw a
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ClassCastException.html"
>
ClassCastException
</link>
int c = 4 / a; // May throw an
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/ArithmeticException.html"
>
ArithmeticException
</link>
} catch (
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/doc/openjdk-17-doc/api/java.base/java/lang/RuntimeException.html"
>
RuntimeException
</link>
e) { // Common parent class
System.err.println(e.getMessage());
}
</programlisting>
</answer>
</qandaentry>
</qandadiv>
</qandaset>
</section>
</section>
This diff is collapsed.
Click to expand it.
Doc/Sd1/Appendix/appendix.xml
+
3
−
0
View file @
d2c71a53
...
...
@@ -2353,6 +2353,9 @@ Value 2147483645 is not prime.
</listitem>
</orderedlist>
<xi:include
href=
"Exam/2023/Summer/exam.xml"
xpointer=
"element(/1)"
ns:idfixup=
"auto"
/>
<xi:include
href=
"Exam/2022/Winter/exam.xml"
xpointer=
"element(/1)"
ns:idfixup=
"auto"
/>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment