個人財務 Javaプログラミングとループの反復 - ダミー

Javaプログラミングとループの反復 - ダミー

目次:

ビデオ: 【Javaプログラミング入門 #10】繰り返し〜for〜(構造化プログラミング/for文) ※1.5倍速での再生を推奨 2024

ビデオ: 【Javaプログラミング入門 #10】繰り返し〜for〜(構造化プログラミング/for文) ※1.5倍速での再生を推奨 2024
Anonim

Javaプログラムのループを書きやすく、分かりやすくするには、Javaのbreak文とcontinue文がループ反復にどのように影響するかを知る必要があります。

Javaのbreak文

以下のプログラムをざっと見てください。プログラムはランダムに1から10までの数字を生成し、その数字を推測するように繰り返し求めます。

リスト1

import static java。ラング。システム。でる; import java。 util。スキャナ; import java。 util。ランダム;パブリッククラスGuessAgain {public static void main(String args []){スキャナのキーボード=新しいスキャナ(システム。 int numGuesses = 0; int randomNumber = new Random()。 nextInt(10)+1;でる。 println( "************");でる。 println( "推測ゲームへようこそ");でる。 println( "************");でる。 println();でる。 print( "1から10までのintを入力してください:"); int inputNumber = keyboard。 nextInt(); numGuesses ++; while(inputNumber!= randomNumber){ out。 println();でる。 println( "もう一度やり直してください…");でる。 print( "1から10までのintを入力してください:"); inputNumber =キーボード。 nextInt(); numGuesses ++; } 。 print( "あなたが勝つ");でる。 println(numGuesses + "推測");キーボード。 close();}}

下の図は、コードの実行を示しています。ユーザーは5つの推測を行います。毎回、コンピュータは、推測が正しいかどうかをチェックします。間違った推測により、再度試行する要求が生成されます。正確な推測のために、ユーザは、彼または彼女が作った推測の数の集計とともに、あなたが勝利することを得る。コンピュータは、何度も何度も何度も何度も何度も何度も何度も繰り返して、毎回チェックして、ユーザーの推測がランダムに生成された数と同じであるかどうかを確認します。ユーザが推測するたびに、コンピュータは推測の集計に1を加える。ユーザが正しい推測を行うと、コンピュータはその計算を表示する。

<! - 1 - >

このプログラムはどうですか?まあ、いくつかのステートメントは、プログラムに複数回出現します。通常、プログラムのある部分から別の部分にコピーされるステートメントは、懸念するものではありません。しかし、全体の戦略は疑わしいと思われる。プログラムはループの前にユーザーから番号を取得し、ループの内部で(再び)番号を取得します。

<! - 2 - >
。 print( "1から10までのintを入力してください:"); int inputNumber =キーボード。 nextInt(); numGuesses ++; while(inputNumber!= randomNumber){out。 println();でる。 println( "もう一度やり直してください…"); 。 print( "1から10までのintを入力してください:"); inputNumber =キーボード。 nextInt(); numGuesses ++; } このコードでは、ループを作成するための標準的なトリックを使用します。それは、ループをプライミングする

と呼ばれています。パターンは <! { 入力を増やす

}
whileループの開始時にコンピュータは、ユーザの入力に関係する条件をチェックする。したがって、コンピュータは、ユーザが何らかの入力を行うまでループに入りません。次に、コンピュータがループ内にあるとき、コンピュータはループの次の反復に給電するための入力を求めます。トリックは変わったようだが、うまくいく。 <! - 1 - > 開発者はこのテクニックを使用してループを始めるので、それほど悪くはありません。しかし、別の方法があります。 リスト2 import static java。ラング。システム。でる; import java。 util。スキャナ; import java。 util。ランダム;パブリッククラスGuessAgain {public static void main(String args []){スキャナのキーボード=新しいスキャナ(システム。 int inputNumber、numGuesses = 0; int randomNumber = new Random()。 nextInt(10)+1;でる。 println( "************");でる。 println( "推測ゲームへようこそ");でる。 println( "************");でる。 println(); while(true){ out。 print( "1から10までのintを入力してください:"); inputNumber =キーボード。 nextInt(); numGuesses ++;

if(inputNumber == randomNumber){

break;

}

。 println();でる。 println( "もう一度やり直してください…");

} 。 print( "あなたが勝つ");でる。 println(numGuesses + "推測");キーボード。ユーザーの視点から見ると、リスト2のコードは、リスト1のコードとまったく同じことを行います(どちらのプログラムの出力も見るには、上の図を参照してください)。違いは、リスト2はキーボードの呼び出しが1つしかないことです。 nextInt。その呼び出しはループ内にあるため、コンピュータは入力をテストせずにループに入る必要があります。 <! - 2 - > <! - 1 - > ループの状態を見ると、これがどのように動作するかを見ることができます。ループの条件は常にtrueです。何が起こっていても、ループの状態は常にテストに合格します。ループの状態は大きな詐欺です。ループの状態でテストに失敗することで、ループから飛び出すことは決してありません。代わりに、ループ内にあるbreakステートメントを実行すると飛び出します(if(inputNumber == randomNumber)ロードブロッキングを過ぎたときにbreakステートメントを実行します)。すべてがうまく機能します。

- <! - 2 - > コンピュータがループ内にあるbreak文を実行すると、コンピュータはループの外に飛び出します(ループの後の最初の文まで)。
breakステートメントでは、コンピュータは1つのループから飛び出します。そのループが別のループ(外側のループ)の中にある場合、コンピュータは外側のループの外側にジャンプしません。 (int i = 0; i <3; i ++){ for(int j = 0; j <100; j ++)のためのBreakOutOfLoop(public static void main(String [] args) ){ システム。でる。 print(j + ""); if(j> 9){break;}

}

システム。でる。 println( "私は勃発!");

}

}}

次の図は、前述のコードの出力を示しています。

<! - 3 - >

コンピュータがbreak文に達すると、制御はI broken out文にジャンプします。私が声明を出したのは、jループの 外 ですが、forループの中に あります。 プログラマーの観点から見ると、リスト2のコードはリスト1のコードよりも自然です。結局のところ、ゲームはどのように進んでいますか?ユーザーが推測すると、コンピュータは推測をチェックし、推測が正しくない場合、コンピュータは「もう一度お試しください。リスト2で説明した一連のイベントですが、リスト1では、ループ内のコードは逆の順序でイベントを記述しているようです。ループに「Try again」と表示され、ユーザーが数値を入力します。 リスト2は、リスト1のループプライミング手法に代わる優れた方法を提供します。それでプログラマはなぜループをプライミングするのですか? Do breakステートメントには隠れた欠点がありますか?さて、答えはあなたの視点にかかっています。一部のプログラマは、ループ内のbreak文が混乱していると考えています。ステートメントからステートメントにジャンプすると、それらはめまいになり、1960年代から スパゲッティコード と呼ばれるものが思い出されます。 (スパゲッティのコードは、goto文を使ってある文から別の文にジャンプします。

Pascal by Example

の著者B. Burdは、 "gotoを使ったプログラミングは、下水道を通ってパリを回るようなものです。ショートカットはありますが、どれも取る価値はありません」)ループ内のbreak文は例外でありルールではありません。必要に応じてそれらを使用しますが、他の人のJavaコードでそれらの多くを見つけることは期待しないでください。

Javaのcontinue文 リスト3は、プログラムのループ用の秘密のソースを提供します。 1から20までの3つの数字をランダムに生成するゲームを想像してください。ユーザーは数字を推測する5ターンを取る。ユーザーが正しい推測を入力すると、プログラムはユーザーを祝福します。 (「良い推測」とはプログラムを言います)。ユーザが間違った推測を入力すると、プログラムはフィードバックを提供しません。 リスト3にはすべてのことを実現するためのコードがいくつか含まれています。 リスト3 import static java。ラング。システム。でる; import java。 util。スキャナ; import java。 util。ランダム;パブリッククラスGuessAgainAndAgain {public static void main(String args []){スキャナのキーボード=新しいスキャナ(システム。 int inputNumber; int randNum1 = new Random()。 nextInt(20)+1; int randNum2 =新しいランダム()。 nextInt(20)+1; int randNum3 =新しいランダム()。 nextInt(20)+1;でる。 println( "************");でる。 println( "推測ゲームへようこそ");でる。 println( "************");でる。 println(); for(int i = 0; i <5; i ++){out。 print( "intを入力:"); inputNumber =キーボード。 nextInt();

if(inputNumber!= randNum1 &&

inputNumber!= randNum2 && inputNumber!= randNum3){ continue; } 。 println( "良い推測!");でる。 println();}出力します。 print( "数字は");でる。 print(randNum1 + "");でる。 print(randNum2 + "");でる。 print(randNum3 + "");キーボード。 close();}}

この図は、そのようなプログラムの実行を示しています。

Javaのcontinueステートメントは、ループ内の残りのステートメントを越えてジャンプするようにコンピュータに指示します。つまり、ループ内で残りのステートメントを実行する代わりに、ループの次の反復の開始に移ります。したがって、リスト3では、inputNumberがプ​​ログラムのランダムに生成された数値でない場合、コンピューターは「良い推測」コードを超えてジャンプし、ループ・カウンター(変数i)をインクリメントし、ユーザーに別の入力値を要求します。 (もちろん、ループ・カウンタが限界に達すると、コンピュータは別の反復を実行せず、ループの外に飛び出して、ループの後にある文を実行します。)

リスト3を簡単に書き直すことができますコードにはcontinueステートメントがありません。 if文の中に「良い推測」コードを置く必要がありますが、それは問題ありません。 continueステートメントは、リスト3プログラムの外観を改善するものではありません。しかし、if文の中にコードを入れ子にしたくない場合は、continue文が便利です。

おそらく、あなたのアプリケーションでは、残りのループは複雑な一連のステートメントです。このシーケンスをifステートメントの中に入れることで、このシーケンスをもっと複雑に見せたくありません。あるいは、あなたのアプリケーションでは、ループの残りの部分をめったにスキップしないで、if文にループの残りの部分を囲まないようにして、この希少性を強調したいと思うかもしれません。どちらの場合でも、continueステートメントはまさに正しい選択かもしれません。

Javaプログラミングとループの反復 - ダミー

エディタの選択

Drupalフォーラムの有効化 - ダミー

Drupalフォーラムの有効化 - ダミー

フォーラムはユーザーコミュニティを作成するのに最適です。人々は他者からの援助を得ることができ、あなたのコンテンツに関するフィードバックを提供し、単純に社会化することができます。あなたのDrupalフォーラムは、あなたが望むようにしっかりとまたはゆるやかに制御することができます。フォーラムで許可されているカテゴリを制御できます。フォーラムの例を見るには、Drupal Forumを参照してください。 ...

ドリューパルフレンドリーなウェブホスティング会社 - ダミー

ドリューパルフレンドリーなウェブホスティング会社 - ダミー

ウェブホスティング会社は、あなたがDrupalをインストールし、あなたのサイトをウェブ上に見えるようにするWebサーバー。一部の企業では、Drupalをインストールしたり、ワンクリックでインストールすることができます。あなたがDrupalのインストールをスキップする場合は、次のいずれかのアカウントを取得することを検討してください。

Drupalガーデンサイト構造管理 - ダミー

Drupalガーデンサイト構造管理 - ダミー

Drupal Garden Structureページでは、 、ページ、およびブロックを表示します。このページから制御できる特定の機能、ブロック、およびページには、連絡先フォーム、フォーラム、メーリングリストなどがあります。ブロックで表示される機能をブロックで管理することもできます。

エディタの選択

エグゼクティブとのデータマイニング - ダミー

エグゼクティブとのデータマイニング - ダミー

数字で遊ぶという楽しみのためにデータマイニングに取り掛からない。あなたは行動を望む。あなたは正しいことを見たいと思っています。データからの確かな証拠に基づいてビジネス上の決定を下すことが重要であることを理解しています。しかし、あなたは決定を下す権限を持つ人ではありません。だからあなたは...

ビッグデータガバナンスチャレンジ - ダミー

ビッグデータガバナンスチャレンジ - ダミー

データガバナンスは、大きなデータソースが彼らがどのように管理されているか。従来のデータウェアハウスやリレーショナルデータベース管理の世界では、データ保護の必要性に関するルールをよく理解している可能性があります。たとえば、医療界では、それは...

エディタの選択

エレクトロニクスコンポーネント:赤外線ライトダミーを作成する方法

エレクトロニクスコンポーネント:赤外線ライトダミーを作成する方法

赤外線を電気的に生成するには、赤外線スペクトルで動作する特殊な発光ダイオード(LED)を使用します。赤外線LED(しばしばIR LEDと呼ばれる)は、RadioShackまたは電子部品を販売する他の店で容易に入手できます。 IR LEDは、通常のLEDと似ていますが、光を見ることはできません。

デジタルエレクトロニクス:キット74のDOSコマンド - ダミーの

デジタルエレクトロニクス:キット74のDOSコマンド - ダミーの

を通して、あなたの電子プロジェクトを制御する場合パラレルポートであるKit 74 DOSソフトウェアは、コマンドプロンプトから実行できるRELAY、DELAY、WAITFORの3つのコマンドで構成されています。 RELAYコマンドRELAYコマンドは、1バイトのデータをパラレルポートに送信します。あなたから実行できること - RELAY、DELAY、およびWAITFOR - 8つの出力端子のそれぞれが...

デジタルエレクトロニクス:フリップフロップ回路の種類? - エレクトロニクスではダミー

デジタルエレクトロニクス:フリップフロップ回路の種類? - エレクトロニクスではダミー

、フリップフロップは特殊なタイプのゲートラッチ回路です。フリップフロップにはいくつかの異なるタイプがあります。フリップフロップの最も一般的なタイプは次のとおりです。SRフリップフロップ:SRラッチに似ています。 CLOCK入力に加えて、SRフリップフロップにはSETとRESETという2つの入力があります。 SET入力がHIGHの場合...