Javaのストリームを勉強している際に、下記のサンプルソースを見ました。
(ユーザが入力した内容を、1文字ずつそのまま画面に返すプログラムです。)
疑問点があるので教えて下さい。
=====
import java.io.*;
public class Sample{
public static void main(String args[]){
int b;
try{
while((b = System.in.read()) != -1){
System.out.print((char)b);
以下省略
======
■疑問箇所1.
while((b = System.in.read()) != -1)
とありますが、
(1)ユーザが入力した文字(整数ではない)が、何故、int型の変数に代入出来るのでしょうか?
(2)read()メソッドはint型の戻り値を持つようですが、EOFの"-1"以外の時は、
どんな数値が返されているのでしょうか?
(read()メソッドは、1文字読み込んで、戻り値でその文字をUnicodeにエンコードした値を返しているとか?)
■疑問箇所2.
System.out.print((char)b);
とありますが、変数bには数値が入っていると考えられます。
これは、変数bの整数が、(char)でキャストされる事によって、
再び、文字に「変換」されているのでしょうか?
以上、教えて下さい。
No.2ベストアンサー
- 回答日時:
>System.out.print((char)b);
>とありますが、変数bには数値が入っていると考えられます。
>これは、変数bの整数が、(char)でキャストされる事によって、
>再び、文字に「変換」されているのでしょうか?
これはとても手抜きなやり方です。
標準入力から読み込まれた文字列が「1文字=1バイト」で表せる文字だけに限られていてしかもその文字コードがUnicodeの文字コードと一致する場合だけ期待した出力が得られます。
ASCIIの範囲内の英数字や記号類であればこの条件を満たすため、たまたま動いているように見えるだけです。
No.1
- 回答日時:
> (1)ユーザが入力した文字(整数ではない)が、何故、int型の変数に代入出来るのでしょうか?
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/in …
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
「System.in.read()」(InputStream)は標準入力をバイトで扱い、戻り値がint型だからです。
また標準入力は文字とは限りません。
> (2)read()メソッドはint型の戻り値を持つようですが、EOFの"-1"以外の時は、
どんな数値が返されているのでしょうか?
リファレンスを読んだ方が正確で分かりやすいですね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
> これは、変数bの整数が、(char)でキャストされる事によって、
> 再び、文字に「変換」されているのでしょうか?
キャストは単に型を合せるだけですが、文字に変換といえば、まぁそうですね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Ruby プログラミング 3 2023/06/09 14:30
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Path型をString型へ変換する(Java)
-
javaで質問です。 文字列2023/2...
-
JavaのStringクラスに「外字」...
-
ダブルクォーテーションのrepla...
-
カタカナをローマジに変換する。
-
int型のゼロ埋め
-
COBOLで半角カナを全角カナに変換
-
【JAVA】CharをByteに変換したい。
-
「C#」文字コードの取得&文字変換
-
文字化け対策について
-
javascriptで文字列のsjis利用...
-
IBM漢字コード⇒SJIS変換方法
-
C言語32bitから64bitの移行につ...
-
半角カタカナをローマ字変換す...
-
replace関数で複数の文字の変換...
-
jspでString型からlong型への変換
-
[Javascript]エンターキー押下...
-
Windows-31Jからutf-8への変換...
-
Visual Studio 6.0でビルド可能...
-
javaの日本語並び替えについて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
javaで質問です。 文字列2023/2...
-
javascriptで文字列のsjis利用...
-
C言語32bitから64bitの移行につ...
-
int型のゼロ埋め
-
カタカナをローマジに変換する。
-
Visual Basic でのコードをASCI...
-
JavaのStringクラスに「外字」...
-
エクセルVBAで「〜」が表現でき...
-
substring バイト単位でやりたい
-
UTF-8とUnicodeの互換性
-
COBOLで半角カナを全角カナに変換
-
スマホでテキストボックスの随...
-
byte[] を long,float とかに...
-
javaで「全角が含まれているか...
-
下記問題の答えが"D"になる意味...
-
Windows-31Jからutf-8への変換...
-
[Javascript]エンターキー押下...
-
Visual Studio 6.0でビルド可能...
おすすめ情報