I am trying to make a digital clock pattern using Java. However, I am having trouble printing the ‘digital’ values side-by-side, instead of one after the other. If I print each digit individually, they are rendered correctly, however, printing a specific time with 4 digits is not output correctly. I have tried to use looping to print the digital time, but could not get it to work. Therefore, I made each digit individually so I could print them side-by-side. Any help would be appreciated. Thank you.
Problem Statement:
Take time as input and output a multiline string representing the input, each digit made up of a 5 x 5
grid with a single space between each digit.
The separator is represented as a colon “:”, in its own 5 x 5
grid.
Example #1:
Input:
72:34
Output:
##### ##### ##### # #
# # # # # #
# ##### ##### #####
# # # # #
# ##### ##### #
Example #2:
Input:
56:78
Output:
##### ##### ##### #####
# # # # # #
##### ##### # #####
# # # # # # #
##### ##### # #####
My Solution:
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class DigitalClock {
private static String colon;
public static void main(String[] args) {
// Example #1
System.out.print(hours(7, 2) + colon + minutes(3, 4));
}
public static String hours(int left, int right) {
return numbers(left) + numbers(right);
}
public static String minutes(int left, int right) {
return numbers(left) + numbers(right);
}
private static String numbers(int number) {
String space = repeat(" ", 4);
String newLine = "n";
String colonMaker = space + "#" + space;
colon = newLine + colonMaker +
repeat(newLine, 2) + colonMaker + newLine;
String right =
space + repeat("#n" + space, 4) + "#";
String top = "#####";
String topLeft = top + newLine + "#";
String topRight = top + newLine + space + "#";
String middle = repeat(newLine, 1) + top;
String middleLeft = newLine + "#" + newLine + top;
String middleRight = newLine + space + "#" + newLine + top;
String bottom = repeat(newLine, 1) + top;
String bottomLeft = newLine + "#" + newLine + top;
String extra = "# #";
String bottomRight = newLine + space + "#n" + top;
String[] digitalFormat = new String[10];
digitalFormat[0] = top + repeat(extra + "n", 3);
digitalFormat[1] = right;
digitalFormat[2] = top + middleRight + bottomLeft;
digitalFormat[3] = topRight + middle + bottomRight;
digitalFormat[4] = extra + newLine + extra + middle + newLine + space + "#n" + space + "#";
digitalFormat[5] = top + middleLeft + bottomRight;
digitalFormat[6] = top + middleLeft + newLine + extra + bottom;
digitalFormat[7] = top + repeat(newLine + space + "#", 4);
digitalFormat[8] = top + newLine + extra + middle +
newLine + extra + bottom;
digitalFormat[9] = top + newLine + extra + middle + newLine + space + "#n" + space + "#";
return digitalFormat[number];
}
private static String repeat(String input, int times) {
return IntStream.range(0, times).mapToObj(i -> input).collect(Collectors.joining(""));
}
}
Output:
#####
#
#
#
######
#
#####
#
#####
#
#
#####
#
#####
#
###### #
# #
#####
#
#
Advertisement
Answer
Try this.
static final Map<Character, String[]> CHARS = new HashMap<>();
static {
CHARS.put(':', new String[] {" ", " # ", " ", " # ", " "});
CHARS.put('0', new String[] {"#####", "# #", "# #", "# #", "#####"});
CHARS.put('1', new String[] {" #", " #", " #", " #", " #"});
CHARS.put('2', new String[] {"#####", " #", "#####", "# ", "#####"});
CHARS.put('3', new String[] {"#####", " #", "#####", " #", "#####"});
/* ....... */
CHARS.put('9', new String[] {"#####", "# #", "#####", " #", "#####"});
}
static String[] pattern(String s) {
int height = CHARS.values().iterator().next().length;
int length = s.length();
String[][] strs = s.chars()
.mapToObj(c -> CHARS.get((char)c))
.toArray(String[][]::new);
return IntStream.range(0, height)
.mapToObj(i -> IntStream.range(0, length)
.mapToObj(j -> strs[j][i])
.collect(Collectors.joining(" ")))
.toArray(String[]::new);
}
public static void main(String[] args) {
Stream.of(pattern("02:39")).forEach(System.out::println);
}
output:
##### ##### ##### #####
# # # # # # #
# # ##### ##### #####
# # # # # #
##### ##### ##### #####