Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions generated/labs/backend.java.grundlagen.console/.itninja.index.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"generatedAt" : "2026-03-22T21:56:45.789807222Z",
"project" : "backend.java.grundlagen.console",
"files" : [ {
"path" : "README.md",
"size" : 2201,
"language" : "markdown"
}, {
"path" : "pom.xml",
"size" : 1365,
"language" : "xml"
}, {
"path" : "src/main/java/ch/itninja/labs/Main.java",
"size" : 422,
"language" : "java"
}, {
"path" : "src/main/java/ch/itninja/labs/basicexercises/AsciiHouse.java",
"size" : 233,
"language" : "java"
}, {
"path" : "src/main/java/ch/itninja/labs/basicexercises/AsciiSwissFlag.java",
"size" : 245,
"language" : "java"
}, {
"path" : "src/main/java/ch/itninja/labs/basicexercises/HelloWorld.java",
"size" : 314,
"language" : "java"
}, {
"path" : "src/test/java/ch/itninja/labs/basicexercises/AsciiHouseTest.java",
"size" : 1754,
"language" : "java"
}, {
"path" : "src/test/java/ch/itninja/labs/basicexercises/AsciiSwissFlagTest.java",
"size" : 2499,
"language" : "java"
}, {
"path" : "src/test/java/ch/itninja/labs/basicexercises/HelloWorldTest.java",
"size" : 926,
"language" : "java"
}, {
"path" : "src/test/java/ch/itninja/labs/util/ItNinjaOutput.java",
"size" : 435,
"language" : "java"
} ]
}
92 changes: 92 additions & 0 deletions generated/labs/backend.java.grundlagen.console/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<!--suppress CheckEmptyScriptTag -->

# Java Exercises - Ausgabe auf die Kommandozeile

Mit diesen Übungen kannst du dein Wissen über die Ausgabe auf die Kommandozeile (Konsole) vertiefen.

## Voraussetzung

- Du weisst, was mit Konsole gemeint ist.
- Du kannst Ausgaben auf die Konsole machen.
- Du weisst wie und warum man Zeichen escapen muss.



## Aufgabe 1 - Hello World

Passe den Code an damit `Hello World` auf der Konsole ausgegeben wird.

```java
public static void printHelloWorld(){

// IT-Ninja: Füge hier Deinen Code ein:

}
```

::src(src/main/java/ch/itninja/labs/basicexercises/HelloWorld.java)



## Aufgabe 2 - Ascii House

Zeichne ein Haus in der Konsole. Du darfst dazu folgende Zeichen verwenden:

- `'/'`, `'\'`, `'+'`, `'-'`, `'_'`, `'['`, `']'`, `'|'`, Leerzeichen (`' '`)

```java
public static void printHouse(){

// IT-Ninja: Füge hier Deinen Code ein:

}
```

::src(src/main/java/ch/itninja/labs/basicexercises/AsciiHouse.java)

> **Hinweis:** Vorsicht bei `'\'`, das ist ein besonderes Zeichen in einem String und muss escaped werden, das
> heisst für ein `'\'` muss man innerhalb von einem String das Zeichen zweimal schreiben → `".\\."`

Falls unklar ist, was hier gemeint ist, schau dir [ASCII-Art](https://de.wikipedia.org/wiki/ASCII-Art) an.

Hier eine Katze als Beispiel:

```console
/\_/\
( o.o )
> ^ <
```

## Aufgabe 3 - Ascii Swiss Flag

Zeichne eine Schweizer Fahne. Die Fahne muss einen Rahmen haben. Du darfst dazu
folgende Zeichen verwenden:

- Im Rahmen: `'|'`, `'-'`, `'+''`, Leerzeichen (`' '`)
- Innerhalb: `'|'`, `'-'`, `'+'`, `'*'`, `'='`, `'@''`, Leerzeichen (`' '`)

```java
public static void printSwissFlag(){

// IT-Ninja: Füge hier Deinen Code ein:

}
```

::src(src/main/java/ch/itninja/labs/basicexercises/AsciiSwissFlag.java)

Falls unklar ist, was hier gemeint ist, schau dir [ASCII-Art](https://de.wikipedia.org/wiki/ASCII-Art) an.

Hier ist die japanische Flagge als Beispiel:

```console
------------------
| |
| @@@@ |
| @@@@@@@@ |
| @@@@@@@@@@ |
| @@@@@@@@ |
| @@@@ |
| |
------------------
```
45 changes: 45 additions & 0 deletions generated/labs/backend.java.grundlagen.console/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ch.itninja</groupId>
<artifactId>itninja-labs-01-basicexercises</artifactId>
<version>1.0.0</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<>17</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>

<dependencies>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>17</release>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Testing -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ch.itninja.labs;

import ch.itninja.labs.basicexercises.AsciiHouse;
import ch.itninja.labs.basicexercises.AsciiSwissFlag;
import ch.itninja.labs.basicexercises.HelloWorld;

/**
* Entry point for the It-Ninja basic exercises.
*/
public class Main {
public static void main(String[] args) {
HelloWorld.printHelloWorld();
AsciiHouse.printHouse();
AsciiSwissFlag.printSwissFlag();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ch.itninja.labs.basicexercises;

public class AsciiHouse {

private AsciiHouse() {
// Prevent instantiation
}

public static void printHouse(){

// IT-Ninja: Füge hier Deinen Code ein...

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ch.itninja.labs.basicexercises;

public class AsciiSwissFlag {

private AsciiSwissFlag() {
// Prevent instantiation
}

public static void printSwissFlag(){

// IT-Ninja: Füge hier Deinen Code ein...

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ch.itninja.labs.basicexercises;

/**
* Utility class providing methods for basic Hello World output.
*/
public class HelloWorld {

private HelloWorld() {
// Prevent instantiation
}

public static void printHelloWorld(){

// IT-Ninja: Füge hier Deinen Code ein...

}
}



Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package ch.itninja.labs.basicexercises;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.List;
import java.util.Set;

import ch.itninja.labs.util.ItNinjaOutput;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

class AsciiHouseTest {

@Test
void givenPrintHouse_whenCalled_thenOutputHasOnlyAllowedCharacters() {
// GIVEN
Set<Character> allowedChars = Set.of(
' ', '/', '\\', '+', '-', '_', '[', ']', '|', '\n', '\r'
);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream originalOut = System.out;
System.setOut(new PrintStream(outputStream));

try {
// WHEN
AsciiHouse.printHouse();
} finally {
// System.out zurücksetzen, egal ob Fehler auftritt oder nicht
System.setOut(originalOut);
}

// THEN
List<String> lines = outputStream.toString().lines().toList();

System.out.println(lines);

assertFalse(lines.isEmpty(), "Output should not be empty");
assertTrue(lines.size() >= 2, "A house should have at least 2 lines, but has " + lines.size());

for (String line : lines) {
for (int pos = 0; pos < line.length(); pos++) {
char c = line.charAt(pos);
if (!allowedChars.contains(c)) {
fail("Invalid character '" + c + "' in line: " + line);
}
}
}

ItNinjaOutput.PrintItNinjaOutput("AsciiHouse", "", String.join("\r\n", lines));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package ch.itninja.labs.basicexercises;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.List;

import ch.itninja.labs.util.ItNinjaOutput;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class AsciiSwissFlagTest {

@Test
void givenPrintSwissFlag_whenCalled_thenOutputHasValidFrameAndCharacters() {
// GIVEN
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintStream originalOut = System.out;
System.setOut(new PrintStream(outputStream));

try {
// WHEN
AsciiSwissFlag.printSwissFlag();
} finally {
System.setOut(originalOut);
}

// THEN
List<String> lines = outputStream.toString().lines().toList();

assertFalse(lines.isEmpty(), "Output should not be empty");
assertTrue(lines.size() >= 3, "Flag should have at least 3 lines");

String allowedInnerChars = " +*";
String allowedFrameChars = "|-_=`~";

int firstLineNumber = 0;
int lastLineNumber = lines.size() - 1;
for (int lineNumber = 0; lineNumber < lines.size(); lineNumber++) {
String line = lines.get(lineNumber);

boolean isFirstLine = lineNumber == firstLineNumber;
boolean isLastLine = lineNumber == lastLineNumber;
if (isFirstLine || isLastLine) {
// Top or bottom line must contain a horizontal frame character
assertTrue(
line.chars().anyMatch(ch -> "-_=`~".indexOf(ch) >= 0),
"Top/bottom line must contain at least one horizontal border character"
);
} else {
// Middle lines must start and end with '|'
assertTrue(
line.length() >= 2 && line.startsWith("|") && line.endsWith("|"),
"Line " + (lineNumber + 1) + " must start and end with '|'"
);
}

// All characters must be allowed
for (char c : line.toCharArray()) {
if (!allowedInnerChars.contains(String.valueOf(c)) &&
!allowedFrameChars.contains(String.valueOf(c))) {
fail("Invalid character '" + c + "' in line: " + line);
}
}
}

ItNinjaOutput.PrintItNinjaOutput("AsciiSwissFlag", "", String.join("\r\n", lines));

}
}
Loading
Loading