バイナリクロック
Posted feedbacks - Java
ごくシンプルに。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import java.util.Calendar;
import java.util.GregorianCalendar;
public class BinaryClock {
public static void main( String[] args ) {
// 現在時刻を取得する。
Calendar cal = new GregorianCalendar();
// 現在時刻から時・分を取得する。
int hour = cal.get( Calendar.HOUR_OF_DAY );
int min = cal.get( Calendar.MINUTE );
// 時・分を二進数に変換する。
String binHour = Integer.toString( hour, 2 );
String binMin = Integer.toString( min, 2 );
// 二進数を表示用文字列に変換する。
String dispStrHour = binToDispStr( binHour );
String dispStrMin = binToDispStr( binMin );
// 表示用文字列を出力する。
System.out.println( dispStrHour );
System.out.println( dispStrMin );
}
// 二進数を表示用文字列に変換する。
private static String binToDispStr( String bin ) {
String bak = "";
for ( int i = 0; i < bin.length(); ++i ) {
if ( bin.charAt( i ) == '0' ) {
bak += "□";
} else {
bak += "■";
}
}
return bak;
}
}
|
先に投稿した#9342を一部変更。
二進数を表示文字列に変換する処理(binToDispStrメソッド)を、文字列置換による実装に変更した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import java.util.Calendar;
import java.util.GregorianCalendar;
public class BinaryClock2 {
public static void main( String[] args ) {
// 現在時刻を取得する。
Calendar cal = new GregorianCalendar();
// 現在時刻から時・分を取得する。
int hour = cal.get( Calendar.HOUR_OF_DAY );
int min = cal.get( Calendar.MINUTE );
// 時・分を二進数に変換する。
String binHour = Integer.toString( hour, 2 );
String binMin = Integer.toString( min, 2 );
// 二進数を表示用文字列に変換する。
String dispStrHour = binToDispStr( binHour );
String dispStrMin = binToDispStr( binMin );
// 表示用文字列を出力する。
System.out.println( dispStrHour );
System.out.println( dispStrMin );
}
// 二進数を表示用文字列に変換する。
// ※文字列置換による実装
private static String binToDispStr( String bin ) {
return bin.replaceAll( "0", "□" )
.replaceAll( "1", "■" );
}
}
|
お題から少しずれますが、元ネタがウィジェットだそうなので、Java Swing です。 フォントによってしまいますが、見た目が面白いものとして"i/!"にしました。 "Q/O"でも分かりにくくて良いですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class SeventeenBarsClock extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
SeventeenBarsClock clock = new SeventeenBarsClock();
clock.pack();
clock.setLocationRelativeTo(null);
clock.setVisible(true);
clock.start();
}
});
}
private BynaryLabel hourLabel, minuteLabel, secondLabel;
private javax.swing.Timer timer;
SeventeenBarsClock() {
super("17BarsClock");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hourLabel = new BynaryLabel(5);
minuteLabel = new BynaryLabel(6);
secondLabel = new BynaryLabel(6);
setLayout(new FlowLayout());
add(hourLabel);
add(minuteLabel);
add(secondLabel);
timer = new javax.swing.Timer(0, this);
timer.setDelay(1000);
}
public void start() { timer.start(); }
public void stop() { timer.stop(); }
@Override
public void actionPerformed(ActionEvent e) {
Calendar cal = new GregorianCalendar();
hourLabel.setValue(cal.get(Calendar.HOUR_OF_DAY));
minuteLabel.setValue(cal.get(Calendar.MINUTE));
secondLabel.setValue(cal.get(Calendar.SECOND));
}
private static class BynaryLabel extends JLabel {
private static final long serialVersionUID = 1L;
BynaryLabel(int length) {
this.length = length;
setValue(0);
}
private int length;
void setValue(int value) {
StringBuilder sb = new StringBuilder(length);
for(int m=1<<(length-1); m>0; m>>=1) sb.append((value & m) != 0 ? "i" : "!");
setText(sb.toString());
}
}
}
|


lunlumo #9282() [ Ruby ] Rating6/8=0.75
20:18の場合,例えば以下の様な出力をするイメージです。
出力例:
■□■□□
□■□□■□
see: Binary Clock Widget
Rating6/8=0.75-0+
[ reply ]