問題タブ [stringindexoutofbounds]
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 - 実行時 Error_String インデックスが範囲外 Exception_Printing 文字列の奇数インデックスと偶数インデックス
コード :
java.io をインポートします。; java.util をインポートします。;
パブリック クラス ソリューション {
}
問題 : コードの実行中に実行時例外を取得します。--> 文字列インデックスの境界外例外
python - Python で文字列の最初と最後の文字を比較する
first_and_last 関数は、メッセージ [0] またはメッセージ [-1] を使用して文字にアクセスし、文字列の最初の文字が文字列の最後の文字と同じ場合は True、異なる場合は False を返します。空の文字列の条件をチェックしているときに、次のエラーが発生します。
なぜこのエラーが発生するのかわかりません。以下は私のコードです:
java - java 右から左へのエバリュエーターが左から右へのエバリュエーターに変わる、StringIndexOutOfBoundsException java
右から左への評価プログラムを左から右への評価プログラムに変換する必要がある割り当てがあります (Y/N プロンプトで複数の式を評価するように求められる場合もそうします)。プログラムにいくつかの変更を加える必要がありました。
- 数字と演算子の間にスペースを許可する
- 負の数には、マイナス記号の直後に数字または小数点が続く必要があります。さらに、負の数は通常、括弧で囲む必要があります。(これは、ネガティブにアンダースコアを使用する古いプログラムとは異なります)
- 最高の優先順位で累乗を許可する必要があります。
- 評価は左から右に行う必要があります。これが主な変更点です。A) formNum() メソッドは、数値の左端の桁または先頭の小数点に遭遇したときに左から右にスキャンするように書き直す必要があります。もちろん、左から右にスキャンしているため、連続する数字から double 値を構築する方法を調整する必要があります。いくつかの例を試して、正しい方法を見つけてください。B) evaluator() メソッドも、左から右にスキャンするように調整する必要があります。いくつかの変更があります: i) 左括弧が検出されると、負の数 (5+ (-13.4) +2 など) を通知しない限り、常にスタック A にプッシュされます。その場合、formNum() を呼び出して負の数を計算し、それを double として B にプッシュし、対応する右括弧をスキップする必要があります。ii) 右括弧が検出されると (負の数の右端ではない)、evalDown() への呼び出しがトリガーされ、対応する左括弧に到達するまで、括弧で囲まれた部分式の操作が評価されます。左括弧も A からポップされます。 iii) 現在のトークン演算子の優先順位がスタックの一番上の演算子と等しい場合、トークンをプッシュしません。代わりに、eval() を使用して A スタックの最上位で操作を実行し、現在のトークン演算子を A スタックの新しい最上位と比較します。例。3.0 / 2.0 * 4.0 があるとします。3 を B にプッシュし、/ を A にプッシュし、2 を B にプッシュします。(誤って) * を A にプッシュし (/ と同じ優先順位)、次に 4 を B にプッシュすると、最初に 2 * 4 を計算し、次に 3/ を計算します。 8.. 代わりに、最初に 3./2 を計算して 1.5 をプッシュし、後で 1.5 * 4 = 6.0 を計算する必要があります。
これを念頭に置いて、ここに古いプログラム ファイルを示します。//古いプログラム ファイルをペーストビン リンクに入れて、読みやすくしました。
ExpressionEvaluator.java https://pastebin.com/QkKdU6dh
ExprEvaluatorTest.java https://pastebin.com/3UqqLsvr
Stack1gen.java https://pastebin.com/KW4Pz9Pt
これが新しいプログラムでの私の試みです。
LR.java
LRTest.java
および Stack1gen.java // 編集: 誤ってこのクラスに間違ったコードを追加しました
LRtest.java を実行して y と入力すると、 StringIndexOutOfBoundsException が発生し、 evaluator() の先頭を指します。何が悪いのかわかりません。誰かが私を助けることができれば、それは大歓迎です。