質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Q&A

2回答

903閲覧

コード模写中にでてきた0x2f、0x3aの意味が知りたい

fabian

総合スコア0

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

0グッド

0クリップ

投稿2022/12/24 06:49

前提

ここに質問の内容を詳しく書いてください。
0x2f,0x3aの意味を知りたい

実現したいこと

ここに実現したいことを箇条書きで書いてください。
if (0x2f<ch && ch<0x3a) break;
if(0x40<ch && ch<0x5b) break;
if(0x60<ch && ch<0x7b) break; の意味を知りたい

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

JavaFX

1import java.awt.Toolkit; 2import java.nio.file.Paths; 3import java.time.Instant; 4import java.util.Random; 5 6import javafx.application.Application; 7import javafx.application.Platform; 8import javafx.geometry.Pos; 9import javafx.scene.Scene; 10import javafx.scene.canvas.Canvas; 11import javafx.scene.canvas.GraphicsContext; 12import javafx.scene.control.Alert; 13import javafx.scene.control.Alert.AlertType; 14import javafx.scene.control.Label; 15import javafx.scene.control.Menu; 16import javafx.scene.control.MenuBar; 17import javafx.scene.control.MenuItem; 18import javafx.scene.image.Image; 19import javafx.scene.input.KeyCode; 20import javafx.scene.input.KeyEvent; 21import javafx.scene.layout.BorderPane; 22import javafx.scene.layout.VBox; 23import javafx.scene.text.Font; 24import javafx.stage.Stage; 25import javafx.stage.StageStyle; 26 27public class TypeTrainer extends Application{ 28 29 Label aLabel = new Label("タイプ:"); 30 Label qLabel = new Label("問題:"); 31 Random rnd = null; 32 boolean fInPlay = false; 33 int point = 0; 34 int count = 0; 35 String qKey = ""; 36 String aKey = ""; 37 Instant expTime = null; 38 final int DURATION = 60; 39 40 @Override 41 public void start(Stage stage) throws Exception { 42 43 stage.setTitle("TypeTrainer"); 44 stage.initStyle(StageStyle.UTILITY); 45 stage.centerOnScreen(); 46 stage.setResizable(false); 47 48 rnd = new Random(Instant.now().getNano()); 49 50 MenuBar menuBar = new MenuBar(); 51 menuBar.setUseSystemMenuBar(true); 52 Menu fileMenu = new Menu("ファイル"); 53 MenuItem mnuStart = new MenuItem("スタート"); 54 mnuStart.setOnAction(event -> { 55 fInPlay = true; 56 expTime = Instant.now().plusSeconds(DURATION); 57 newQKey(); 58 59 }); 60 61 menuBar.getMenus().add(fileMenu); 62 MenuItem mnuExit = new MenuItem("終了"); 63 64 mnuExit.setOnAction(event->Platform.exit()); 65 66 fileMenu.getItems().addAll(mnuStart, mnuExit); 67 68 BorderPane root = new BorderPane(); 69 VBox center = new VBox(); 70 center.setSpacing(10); 71 qLabel.setFont(new Font(24)); 72 aLabel.setFont(new Font(24)); 73 aLabel.setFocusTraversable(false); 74 75 final Canvas canvas = new Canvas(); 76 Image img = new Image(Paths.get("KeyBoard.png").toUri().toString()); 77 canvas.setWidth(img.getWidth()); 78 canvas.setHeight(img.getHeight()); 79 GraphicsContext gc = canvas.getGraphicsContext2D(); 80 gc.drawImage(img, 0,0); 81 82 canvas.setOnKeyTyped(event-> keyTyped(event)); 83 canvas.setFocusTraversable(true); 84 center.setAlignment(Pos.CENTER); 85 center.getChildren().addAll(qLabel, canvas,aLabel); 86 root.setTop(menuBar); 87 root.setCenter(center); 88 89 stage.setScene(new Scene(root, 240, 195)); 90 stage.show(); 91 } 92 93 void keyTyped(KeyEvent event) 94 { 95 if(fInPlay == false) 96 return; 97 98 boolean fGood = true; 99 100 if(event.getCode() == KeyCode.ENTER) fGood = false; 101 if(event.getCode() == KeyCode.BACK_SPACE) fGood = false; 102 if(event.getCode() == KeyCode.DELETE) fGood = false; 103 if(event.getCode() == KeyCode.CLEAR) fGood = false; 104 if(fGood == false) { 105 Toolkit.getDefaultToolkit().beep(); 106 return; 107 } 108 109 110 aKey = event.getCharacter(); 111 aLabel.setText("タイプ:" + aKey); 112 if(aKey.equals(qKey)) 113 point += 1; 114 else 115 Toolkit.getDefaultToolkit().beep(); 116 if(Instant.now().isAfter(expTime)) 117 { 118 gameOver(); 119 return; 120 } 121 newQKey(); 122 } 123 124 void newQKey() 125 { 126 int ch = 0; 127 while(true) { 128 ch = rnd.nextInt(0x7a); 129 if (0x2f<ch && ch<0x3a) break; 130 if(0x40<ch && ch<0x5b) break; 131 if(0x60<ch && ch<0x7b) break; 132 133 } 134 if(Instant.now().isAfter(expTime)) 135 gameOver(); 136 137 qKey = String.valueOf((char)ch); 138 qLabel.setText("問題:" + qKey); 139 count += 1; 140 } 141 142 void gameOver() 143 { 144 fInPlay = false; 145 Alert dlg = new Alert(AlertType.INFORMATION); 146 dlg.setTitle("ゲームオーバー"); 147 dlg.setHeaderText(String.format("ゲームオーバー : 得点=%d / 回数=%d", point, count)); 148 149 dlg.showAndWait(); 150 } 151 public static void main(String[] args) { 152 launch(args); 153 154 } 155 156}

試したこと

0x2f 意味 と検索した

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

0x2f, 0x3aの意味を知りたい

単体での意味は、16進数で表された ASCII コードですね。

まずは、 https://java-reference.com/java_info_ascii.html 等で紹介されている ASCII コード表を見ながら考えてみましょう。


if (0x2f<ch && ch<0x3a) break;

0x2f 以上 0x3a 未満を ASCII コード表から探すと '0' から '9' の数字です。

if(0x40<ch && ch<0x5b) break;

ch が、0x40 以上 0x58 未満を ASCII コード表から探すと 'A' から 'Z' の文字 (アルファベット大文字)です。

if(0x60<ch && ch<0x7b) break;

ch が、0x60 以上 0x78 未満を ASCII コード表から探すと 'a' から 'z' の文字 (アルファベット小文字)です。

いずれも ch の ASCIIコードが、指定した範囲に含まれている場合に break でループから抜ける処理ですね。

投稿2022/12/24 08:05

CHERRY

総合スコア25201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fabian

2022/12/25 10:48

0x2f 以上 0x3a 未満を ASCII コード表から探すと '0' から '9' の数字です。なぜASCIIコード表から探すと'0'から'9'の数字になるのですか?
guest

0

0x2f,0x3aの意味を知りたい

16進数で数値を表してます
0x2f は10進数で47,0x3aは58ですね

投稿2022/12/24 07:35

編集2022/12/24 07:37
y_waiwai

総合スコア87849

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問