問題タブ [infinite-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java toString() が間接サイクルで無限にループするのはなぜですか?
これは、質問というよりも共有したかった落とし穴です。 で印刷する場合toString()
、Java はコレクション内の直接サイクル (コレクションがそれ自体を参照する場合) を検出しますが、間接サイクル (コレクションが別のコレクションを参照する別のコレクションを参照する場合) は検出しません。最初のもの - またはより多くのステップで)。
コレクションを出力するコードのデバッグ中に発生したため、これは私にとって本当に落とし穴でした (直接サイクルをキャッチしたときに驚いたので、一般的にチェックを実装したと誤って想定しました)。質問があります:なぜですか?
私が考えることができる説明は、それ自体を参照するコレクションをチェックするのは非常に安価であるということです.コレクションを保存するだけで済みます.出会い、根本から。さらに、ルートが何であるかを確実に伝えることができない場合があるため、すべてのコレクションをシステムに保存する必要がありますが、とにかくこれを行いますが、すべてのコレクション要素に対してハッシュルックアップを行う必要もあります。 . (ほとんどのプログラミングで) サイクルの比較的まれなケースでは、非常にコストがかかります。(私が思うに)直接サイクルをチェックする唯一の理由は、それがとても安いからです(1つの参照比較)。
わかりました...私は自分の質問にちょっと答えました-しかし、何か重要なことを見逃していませんか? 何か追加したい人はいますか?
明確化: 私が見た問題は、コレクション (つまり、メソッド)の印刷に固有のものであることがわかりました。サイクル自体toString()
には問題はありません(私はサイクルを自分で使用しており、必要です)。問題は、Java がそれらを印刷できないことです。Edit Andrzej Doyle は、コレクションだけでなく、呼び出されるすべてのオブジェクトであると指摘しています。toString
このメソッドに制約されていることを考えると、これをチェックするアルゴリズムは次のとおりです。
- ルートは、最初に呼び出されるオブジェクトです
toString()
(これを決定するには、toString が現在進行中かどうかの状態を維持する必要があるため、不便です)。- 各オブジェクトをトラバースするときに、それを一意の識別子 (インクリメントされたインデックスなど) と共に IdentityHashMap に追加します。
- ただし、このオブジェクトが既にマップにある場合は、代わりにその識別子を書き出します。
このアプローチは、multirefs (複数回参照されるノード) も正しくレンダリングします。
メモリ コストは IdentityHashMap (オブジェクトごとに 1 つの参照とインデックス) です。複雑さのコストは、有向グラフのすべてのノード (つまり、出力される各オブジェクト) のハッシュ ルックアップです。
c# - C# WinForms: 無限ループ内でボタンが押されるのを待っています
GUI を使用して単純な数当てゲームを作成しています。ユーザーがテキストボックスに数字を入力して「OK」を押すのを待っているループを待つ必要があります。ループ内でイベントを待機するにはどうすればよいですか?
注: メッセージ ボックスは必要ありません。これはメイン ウィンドウで行われるため、入力を待つ必要があります。
編集:私は自分自身をもっとよく説明すべきでした。GUI 内にループがあることはわかっています。私が欲しいのは、メソッド内の別のループです。たぶん、これを行うためのより良い方法があります。考えてみると、ボタンのイベント ハンドラー内にコードを記述できます。グローバル変数が必要ですが。いずれにせよ、私はそれについて考えますが、私の質問が今より明確になることを願っています.
EDIT 2:私の質問が明確ではなく、編集があまり役に立たなかったことを申し訳ありません。まず、コードが大きすぎてここに掲載できません。おそらく GUI のスクリーンショットを投稿する必要があるので、あまり役に立ちません。基本的に、「最大数」と「許容される推測の数」の 2 つのフィールドがあります。ユーザーはこの2つを入力して「再生」をクリックします。テキストボックスと「推測」ボタンを備えた新しいパネルが利用可能になります。ユーザーが推測を入力すると、プログラムはそれが正しいかどうかを確認します。
2 番目の無限ループの目的は、グローバル変数を回避することです。ユーザーが「再生」をクリックするたびに、ゲームは正しい推測として新しい乱数を生成する必要があります。すべてがメソッド内で行われる場合、問題はありません。ただし、「Guess」ボタンのイベント ハンドラーが複数回呼び出される場合は、数値をフォームのインスタンス変数として格納する必要があります。確かに大したことではありませんが、数値は Form ではなく、現在のゲームを指示するメソッドのプロパティであるべきだと思います。
また、メソッドの外で推測の残りの数を追跡する必要があります。繰り返しますが、大したことではありません。可能であれば、グローバルを避けたいだけです。
繰り返しますが、私の質問が明確ではなく、申し訳ありません。ちょっと疲れていて、あまり書く気になれませんでした。これでもはっきりしない場合は、気にしないでください。何か考えてみます。
java - 再帰呼び出しで無限ループを検出する方法は?
再帰的に自分自身を呼び出す関数があり、無限ループに入った場合、つまり同じ問題で再度呼び出された場合に検出して終了したいと考えています。それを行う最も簡単な方法は何ですか?
編集: これは関数であり、x と y の異なる値で再帰的に呼び出されます。再帰呼び出しで、ペア (x,y) の値が繰り返される場合に終了したい。
iphone - iPhoneで無限ループのボールの跳ね返りアニメーションを作成する最良の方法は何ですか?
鳥が跳ねるiPhoneゲームを開発しています。
飛んでいる鳥の羽をアニメーション化するための画像を次のように設定しました。
ここで、鳥を動かす方法は、NSTimerを使用して0.03秒ごとに発砲し、imgBird[i].centerのx座標またはy座標から1を加算/減算することです。
私はここからこのようにすることを学びました。http://icodeblog.com/2008/10/28/iphone-programming-tutorial-animating-a-ball-using-an-nstimer/
しかし、問題は、別のタイマー(同じように船を動かすため)が作動するとすぐに鳥が遅くなり、船の動きを止めると元の速度に戻ることです。
NSTimer以外に鳥を動かし続けるためのより良い方法はありますか?
鳥の動きは無限ループです。
php - PHP スクリプトのループ
ディレクトリをチェックし、15 秒以内に変更されていないファイルを削除する PHP スクリプトがあります (これはゲーム用です)。
私の問題は、このスクリプトを常に実行する方法です。10 分ごとに実行するように cron ジョブを設定すると、PHP スクリプトで sleep(10) を伴う無限ループが発生します。私の考えでは、コードは 10 秒ごとに実行され、スクリプトが停止した場合は、最終的に cron ジョブが再起動するというものでした。
ただし、スクリプトが開始されると、約 3 ループ (30 秒) 実行されてから停止します。PHP は、ファイルの読み込みごとに非常に多くのメモリしか取得できないと聞いたことがあります。
この PHP スクリプトを無期限にループさせるにはどうすればよいですか? 自分自身を呼び出す方法があるかもしれません
php - PHPで無限ループをデバッグして保護する方法は?
私は最近、プログラミング能力に挑戦する問題に遭遇しました、そしてそれは非常に偶然の無限ループでした。私はそれを乾かすためにいくつかのコードを書き直し、それが呼び出した正確なメソッドによって繰り返し呼び出されていた関数を変更しました。確かに、初歩的な問題です。Apacheはクラッシュすることで問題を解決することを決定し、ログには「生成された子プロセス」しか記録されませんでした。問題は、私がその日の問題のデバッグを実際に終了したことがなく、午後に発生し、今日それを解決しなければならなかったことでした。
結局、私の解決策は単純でした。ロジックを手動でログに記録し、何が起こったかを確認します。この問題は、2行の一意の行とそれに続く2行がそれぞれ約200回繰り返されるログファイルがある場合にすぐに明らかになりました。
無限ループから身を守る方法は何ですか?そして、それが失敗したとき(そしてそれはそうなるでしょう)、それを追跡するための最速の方法は何ですか?確かに最も効果的なのはログファイルですか、それとも他の何かですか?
それがベストプラクティスである場合、あなたの答えは言語に依存しない可能性がありますが、私はむしろPHP固有の手法とコードに固執したいと思います。
php - 2つの変数を持つPHPforループ?
これを行うことは可能ですか?(これが私のコードです)
私はこのようなものが欲しい:
var0は10です
var1は9です
var2は8です..。
しかし、私のコードは間違っています、それは巨大なリストを与えます。PHPの第一人者、助けてください!!
c# - 無限ループを置き換えるにはどうすればよいですか?
空白行を削除したい、かなり非効率的なC#コードに取り組んでいます。それはこれを行います:
1回の置換では、入力の(たとえば)\ n \ n \ nに対応できないため、ループが必要です。私はそれが機能するはずだと思います、そしてそれは通常機能します。
しかし、時にはそれが無限ループに陥ることがあり、その方法がわかりません。反復ごとに\nの数が減るはずなので、最終的には終了するはずです。
何か案は?
.net - .NET RegEx クラスで無限ループを回避するには?
XPath 式を取得し、選択されている (可能性がある) ノードの親に一致するプレフィックスを返す簡単なタスクを取得しました。
例:
角括弧内のパターンには引用符で囲まれた括弧が含まれている可能性があるため、正規表現を使用してこれを実現することにしました。コード スニペットを次に示します。
パターンはかなり規則的であるため、「/」の後に識別子が続き、文字列の末尾に一致するオプションのグループが続く (....)?$ を探しました。
コードは機能しているように見えましたが、入力文字列のさまざまな値で遊んでいたところ、(コメントに示されている場所に) スペースを挿入するだけで、.NET IsMatch 関数が無限ループに入り、取得したすべての CPU を使用することがわかりました。 .
この正規表現パターンが最良のものであるかどうかに関係なく (私はより複雑でしたが、問題を示すために単純化しました)、自明ではないもので RegEx を使用することは非常に危険である可能性があることを示しているようです。
何か不足していますか?正規表現の一致で無限ループを防ぐ方法はありますか?
vb.net - VB.NET による TCP フリーズ
tcp を使用してメッセージを送受信する VB .Net でゲームを作成しました。
何が起こっているかというと、メッセージを十分に速く送信できないことがよくあるため、TCPObj.connect()
メソッドはタイムアウトに達するまでループに入り、エラーを吐き出します。TCPObj.connect()
ただし、ほとんどの場合、エラーになることはなく、アプリケーションがフリーズし、成功した後に戻ってきます。connect()
接続しようとしているときにメソッドに application.doevents を実行させるにはどうすればよいですか? 基本的に、アプリケーション全体をフリーズさせたくありません。tcp.connect()
は .NET メソッドなので、入って追加することはできませんapplication.doevents
。