初心者です。
教えてください。
下記のサンプルプログラムがあるのですが、
dataにどこでsampleという文字が代入されているのでしょうか?
StringReader sr = new StringReader("samle");
char [] data = new char[1];
while (sr.read(data) ! = -1) {
System.out.println(data);
}
結果が以下の通り表示されます。
s
a
m
p
l
e
No.5ベストアンサー
- 回答日時:
一般的に関数を実行する際は、引数は読み込むだけで更新されません。
これは数学概念の関数に近い挙動です。例)
結果 = 関数(引数) ← 結果だけが更新され、引数はそのまま
ですが関数の中で各種オブジェクトを「操作」することにより、結果以外も更新してしまう関数の「副作用」を起こすことが可能です。
ご提示の処理の場合ですと、
read 関数は引数として指定した配列オブジェクトを、
読み込んだ値を格納するための出力バッファとして「操作」し、
配列の長さ分の文字が格納されるという「副作用」がおきています。
様々な理由により、この様な直観的でない API は多々ありますので、
関数を使用する際は Javadoc の確認を怠らないようにしましょう。
No.4
- 回答日時:
> readはsbの中身をreadするのでしょうか?
> 引数のデータをreadするのではなく。
>そうするとcharのdataはどういう引数になるのでしょうか?
> 配列の箱だけのような気がするのですが。
StringReaderなのですからそうです。
read()した結果が引数指定した変数に格納されます。
つまり、read()結果を1文字ずつ受け取る箱(ここではdata)を、予め定義しておき、read()によってその箱に値を受け取っていることになります。
https://docs.oracle.com/javase/jp/8/docs/api/jav …
引数からして、継承元のReader::read(char[]) を利用していますね。
https://docs.oracle.com/javase/jp/8/docs/api/jav …
https://paiza.io/projects/vDM8MKOs4vrFEBAAF8f4mw
dataを定義しているchar[]の配列数をいじると動きが分かると思います。
配列数を2とかにすると、読込文字数に満たない分は、直前で読み込まれた文字がそのまま出てきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
python の 連鎖代入の文法
-
数値計算??
-
jsp~jspにhiddenを使って変数...
-
Variant型で宣言してるのにEmpt...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
[VBS]変数を定数に変換する方法...
-
VB2008でデリゲートの代わりに...
-
テキストボックスの値を変数に...
-
C言語 アロー演算子について質...
-
クラス中でコンストラクタを使...
-
構造体からレコードセットへの代入
-
bashシェル: 引用符で囲まない...
-
C言語 exitの使い方
-
C言語でしりとりのプログラムを...
-
Cpadで文字化け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
整数xxxが大き過ぎますというエ...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
i++と++i ってどう違うのですか?
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
「%」を使って、偶数か奇数かを...
-
JavaScriptをURLから直接実行し...
-
VBA 1行で複数の代入を行った...
-
ExcelのVBAでをA列に第0〜19項...
-
コマンドプロンプト バッチ|結...
-
無名関数のメリットがよくわか...
おすすめ情報
ありがとうございます。srの参照文字列が2行目のdataにどう入るのかイメージできません。
2行目はあくまでも配列の箱を用意しているだけに考えてしまうのですが。