[ad_1]
私は問題を解決しようとしていました。
問題のリンク: 問題 – B – コードフォース[^]
私は論理的に問題を解決しました。 しかし、Java インデックス バウンド チェックで問題が発生しています。 indexOutOfBound を回避するために、追加の if ステートメントを作成しました。 以前も同じ方法でバインドチェックの問題を解決しましたが(ifステートメントを追加)、今回は機能しません。
エラー メッセージ:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 3, end 2, length 10 at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4604) at java.base/java.lang.String.substring(String.java:2707) at pac1.Simple1.main(Simple1.java:20)
私が試したこと:
<pre>package pac1; import java.util.Scanner; import java.lang.String; public class Simple1{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int t = sc.nextInt(); while(t-->0) { int n = sc.nextInt(); sc.nextLine(); String str = sc.nextLine(); boolean check = false; if(n>2) { for(int i=0; i<n-2; i++) { for(int j=i+2; j<n-1; j++) { if(i+1<n && j+1<n) //StringIndex Bound..additional if statement if(str.substring(i, 2) == str.substring(j,2)) { check = true; break; } } } } if(check) System.out.println("YES"); else System.out.println("NO"); } } }
解決策 1
問題は単純です。部分文字列操作の 1 つが機能するには文字列の長さが足りません。
ただし、原因はより複雑です。入力した正確な文字列と数値に依存し、それらにアクセスできないため、修正することはできません。
だから、それはあなた次第になるでしょう。
幸いなことに、何が起こっているのかを調べるのに役立つツール、デバッガーを利用できます。 使用方法はコンパイラ システムによって異なりますが、IDE と「デバッガ」の名前を Google で検索すると、必要な情報が得られます。
関数の最初の行にブレークポイントを置き、デバッガーでコードを実行します。 次に、コードとデータを見て、何が起こるべきかを手動で解決します。 次に、各行を 1 ステップ実行して、予想どおりの動作を確認します。 そうでない場合は、問題が発生したときであり、後戻りして (またはもう一度実行して詳しく調べて) 原因を突き止めることができます。
正確には何が入っていますか str
、 n
、 i
、 と j
部分文字列が失敗したとき? わかりませんが、それがわかれば、なぜそれが間違っているのかを調べ始めることができます。
申し訳ありませんが、私たちはあなたにそれを行うことはできません – 新しい (そして非常に便利な) スキルを学ぶ時が来ました: デバッグ!
[ad_2]
コメント