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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

4回答

1485閲覧

while 構文について

Wisteria315

総合スコア1

Java

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2020/05/21 06:07

編集2020/05/21 06:31

以下のソースコードで「100 200 end 300 400」とコマンドラインを打ち込み実行すると処理結果が
「コマンドラインで指定された引数は100 200
合計は300です。」となるようにソースコードをかきたいのですが
「コマンドラインで指定された引数は
合計は0です。」
となってしまいます。自分の考えでは合計値300を算出した後にループの終了条件に到達して
終了すると思って組んだのですが上記の結果にならない理由について教えていただきたいです。
また理由とともに解決例も出していただけると幸いです。

(追記)whileループから脱出するための条件として"end"との比較が必要です。

int sum = 0; if(args.length==0){ System.out.println("コマンドラインで、整数値を一つ以上引き渡してください。"); } System.out.print("コマンドラインで指定された引数は"); while(args.equals("end")) { for(int i=0;i<args.length;i++){ sum = sum+(Integer.parseInt(args[i])); System.out.print((Integer.parseInt(args[i]))+" "); } } System.out.println(""); System.out.println("合計は"+ sum +"です。");

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

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

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

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

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

Zuishin

2020/05/21 06:22

おそらく「コマンドライン」という言葉の意味が間違っているために回答者に通じていません。
Zuishin

2020/05/21 06:23

コマンドラインで指定するのであれば、end は不要です。
guest

回答4

0

ベストアンサー

while(args.equals("end")) {

これのせいです。ループ内に入れません。

追記

while(args.equals("end")) {
for(int i=0;i<args.length;i++){
sum = sum+(Integer.parseInt(args[i]));
System.out.print((Integer.parseInt(args[i]))+" ");
}
}

これを次のように。

for(int i=0;i<args.length;i++){
if (args[i].equals("end")) break;
sum = sum+(Integer.parseInt(args[i]));
System.out.print((Integer.parseInt(args[i]))+" ");
}

追記

for を while に変えるのは簡単です。

for (int i = 0; i < 10; i++) {
処理
}

int i = 0;
while (i < 10) {
処理
i++;
}

投稿2020/05/21 06:09

編集2020/05/21 06:51
Zuishin

総合スコア28660

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

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

Zuishin

2020/05/21 07:05

多分、提出しても不正解。
momon-ga

2020/05/21 07:13

もう1回、合計がゼロのままですって質問が出る気がする。
Zuishin

2020/05/21 07:25 編集

絶対標準入力だと思うんですよね。コマンドライン引数だったら while を使う必要無いし、カウンタ使うから for の方がいいし、実行した後であのメッセージが出るのも不自然。 あと入力例に java コマンドや end が無いのも腑に落ちない。 私が思うに、end が入力されるまで空白区切りの入力を処理し続けるのが課題じゃないかと。
momon-ga

2020/05/21 07:26

コマンドラインって、そうゆうことですか。 なるほど。たしかに、それならwhile使う意味がありますね。 でも、argsなんて名前にするかな・・・
Zuishin

2020/05/21 07:28

args は質問者が「コマンドライン」でググって勝手にこれを使うと思ったんじゃないかと思います。
kaputaros

2020/05/21 07:35 編集

> Zuishinさん、momon-gaさん コマンドライン引数、どこ調べても 「mainメソッドに渡す引数」ってありますよ? ただ、for文とwhile文の書き換え をテーマにした講義だったかもしれません。 決めつけはよくないと思いますよ。 そこをドウコウ言ってもしかたないですし、ここで議論することではないと思いますが。
Zuishin

2020/05/21 07:38

コマンドライン引数はその通りですが、コマンドライン引数とは質問のどこにも書いていませんね。
Zuishin

2020/05/21 07:43

いや、書いてるか。まあこれで質問者が満足してるんだからいいんですが、たぶん質問を読み違ってるんじゃないかなって話です。確認しようにも返事をしないからどうしようもない。
guest

0

たぶん、これじゃないと思うけど。
whileループから脱出するための条件として"end"との比較をする例

java

1boolean TДT = true; 2http://teratail.com/questions/263544 3while(TДT) { 4 for(int i=0;i<args.length;i++){ 5 if(args[i].equals("end")) break http; 6 sum = sum+(Integer.parseInt(args[i])); 7 System.out.print((Integer.parseInt(args[i]))+" "); 8 } 9}

無限ループには注意が必要。

投稿2020/05/21 09:02

momon-ga

総合スコア4820

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

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

Zuishin

2020/05/21 09:05

http:// にそんな使い方が。
momon-ga

2020/05/21 09:08

なんと、https://でも大丈夫でーーす
guest

0

while(args.equals("end"))は不要かと思います。

for(int i=0;i<args.length;i++)args全体をループするようになっていますので、さらに外側からwhileをかける必要がありません。

そして、args.equals("end")絶対に成立しない条件なので、whileの中身は一度も実行されないことになります。

投稿2020/05/21 06:11

maisumakun

総合スコア145183

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

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

maisumakun

2020/05/21 06:40

(追記) forの中でbreakさせるのが手っ取り早いです(どうしてもwhileで書かなければいけない事情はあるのでしょうか)。
Wisteria315

2020/05/21 06:44

コードにwhile文を用いる指定がされています。
maisumakun

2020/05/21 06:52

forは機械的にwhileに書き直せます。
momon-ga

2020/05/21 06:53

コードにwhile文を用いる指定がされています。は、わかりましたが、 String[]と、Stringを比較するので、絶対にtrueにならないのは、わかりますよね? whleにせよ、forにせよ配列の要素にアクセスすれば解決では?
guest

0

whileの条件文というのは、成立しているときにナカミを実行するもの、です。
その条件文、成立してるんでしょうか

投稿2020/05/21 06:12

y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問