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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

Java:これでなんで実行できるの?(while文での問題)

notName
notName

総合スコア3

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

3回答

0グッド

1クリップ

629閲覧

投稿2022/11/20 15:25

とある問題集での質問です。

ここに質問の内容を詳しく書いてください。
Javaの勉強中なのですがある程度参考書を進めており練習問題で下記の解答でなんでそうなるのか困っています。do-whileとwhile文の違いについて記述されているのにwhile(j < array[i].length())がどうして問題なく動くのか
その理由が全く分かりません。
お手数ですが教えて下さるとたすかります。

解答結果: A:1 B:1

length()は文字列の長さ lengthは配列の長さと簡単な覚え方ですが①は二次元配列ではないと認識しています。ただ、arrary[i].length()の意味を踏まえ、2つ目のwhile文の終わりどころがわかりません。

私の中では
「 j < array[i].length() 」-> 「 j < array[0].文字列 1 」-> jが要素番号と文字列より小さいなら⁇
という風になっておりそこから??となっています

知りたい事
1.while(j < array[i].length())の意味
2.length()無視してarrary[i]だけをみていいのか(その場合の理由も知りたいです)

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

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

エラーメッセージ

該当のソースコード

Java ソースコード public class Main { public static void main(String[] args) { String[] array = {"A","B"}; int i = 0; while(i < array.length) { int j = 0; do { ++j; }while(j < array[i].length()); //① System.out.println(array[i] + ":" + j); i++; } } } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/20 22:25

こちらの質問が他のユーザーから「問題・課題が含まれていない質問」という指摘を受けました。

jimbe

2022/11/20 16:15

>①は二次元配列ではないと認識 ①とは何でしょう。

回答3

1

ベストアンサー

「 j < array[i].length() 」-> 「 j < array[0].文字列 1 」-> jが要素番号と文字列より小さいなら⁇
という風になっておりそこから??

j < array[i].length()jarray[i].length() の比較です。
(右辺左辺とも 1 つの値同士の比較であり、一方・両方が複数の値同士を直接比較する演算子は java にはありません。)

array[i].length() は、 配列からのオブジェクトの取り出し(array[i]) とそのオブジェクトのメソッドの呼び出し (.length()) に分かれます。

数学で "x を使った式に x の具体的な値を入れて計算する" のと同じようにしてみましょう。
String[] array = {"A", …} で i が 0 の時、 array[i] は array[0] ということで、array[0] は "A" です。
array[0].length() というのは "A".length() ということになり、 String 型の length() は文字列の長さを返します から 1 、 array[i].length() の結果は 1 ということになります。
これと j と比較する式 j < array[i].length() は、jが 1 だったとすると最終的には 1 < 1 となり、結果は (boolean の ) false となります。

array の中身の長さが同じだと分かり難いので String[] array = {"A","BB"}、 i=1 だったとしますと、
array[i].length() → array[1].length() → "BB".length() → 2
j=1 なら
j < array[i].length() → 1 < 2true
となります。

また int len = array[i].length();

java

1String str = array[i]; //配列からのオブジェクトの取り出し: str は "A" とか "B" とかになる 2int len = str.length(); //オブジェクトのメソッドの呼び出し: len は "A" とか "B" とかの長さになる

という 2 行を同じ、という説明も見られる/たと思います。
ですが、 len だけが欲しいなら str は(無くて済むなら)無いほうが良いですし、どうにしろ while の () の中には 2 行は入れられないので 1 行の書き方をしている…という考え方も出来るかもしれません。

投稿2022/11/20 16:31

編集2022/11/21 05:26
jimbe

総合スコア10817

spoofy_dragon👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

notName

2022/11/21 02:28

とてもわかりやすい内容だったので改めて解いた時すんなり解けました
jimbe

2022/11/21 05:59

"." で繋がっているモノは、幾つ繋がっていても左から順に当てはめていけば分かります。 bookcases[i].shelves[j].books[k].title.indexOf("艦これ") >= 0 は 本棚の配列の i 番の本棚内の、棚の配列の j 番の棚内の、本の配列の k 番の本の、タイトル(String)の、指定文字列("艦これ")があったら0以上を返すメソッド、が 0 以上だったら true という感じです。

0

length()は文字列の長さ lengthは配列の長さと簡単な覚え方ですが①は二次元配列ではないと認識しています。ただ、arrary[i].length()の意味を踏まえ、2つ目のwhile文の終わりどころがわかりません。

配列arrayの中身はなんでしょうか? コード上ではString[] array = {"A","B"};となっています。これは「文字列型の配列」です。
文字列は内部では配列になっています。C言語のchar型配列をクラスに包んでプログラマが意識せずに使えるように提供しているだけだと思います。
なので二次元配列と見なしてもいいかもしれません。厳密には違いますが。

知りたい事 1.while(j < array[i].length())の意味

array[i].length()はまずarray[i]の値を取り出します。i = 0 のときはarray[0] = "A"なので、"A"の長さを調べます。長さは1になりました。
よってarray[0].length()は1となります。このようにして考えます。

知りたいこと 2.length()無視してarrary[i]だけをみていいのか(その場合の理由も知りたいです)

単にarray[i]のオブジェクトを取り出して、そのオブジェクトのlengthメソッドを動かしているだけです。

投稿2022/11/21 00:28

編集2022/11/21 00:41
BeatStar

総合スコア4953

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

dodox86

2022/11/21 01:12

> C言語のchar型配列をクラスに包んでプログラマが意識せずに使えるように提供しているだけだと思います。 なので二次元配列と見なしてもいいかもしれません。厳密には違いますが。 誤解を受け易い、あるいは初心の方が混乱しそうな表現は控えた方が良いのではないでしょうか。「思う」とは言うなれば単なる所感です。C言語のお話ではないし、2次元配列で書くことが可能なコードは、本ケースでは使えません。 実装依存ではあるでしょうが、OpenJDK ではchar型の配列と言うのは当たってはいますけれども。実際、多くの処理系ではこのようなかたちになるでしょうね。 http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java

0

1.while(j < array[i].length())の意味

arrayはString型配列の変数、array[i]はi番目の要素、array[i].length()はi番目の要素のString:文字列の長さになります。
length()だけではどの文字列の長さなのか対象がわからず、意味をなさないので単体では使えません。
array[0]とすればarrayの0番目の要素である文字列「A」を指しますが、array[0].length()とするとその文字列の長さになります。
文字列とその文字列の長さという2つの意味を持つわけではありません。
そのためarray[i].length()は0番目、1番目共に1を返します。

do{}while()は一度{}の処理が実行されてから判定を行うので
jをインクリメントして0から1にして判定を行います。
判定結果はfalseなのでこれで処理終了です

2.length()無視してarrary[i]だけをみていいのか

無視していい理由はありません

投稿2022/11/20 15:50

編集2022/11/20 22:22
Crimson_Tide

総合スコア506

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。