【解決方法】範囲外の文字列インデックス: 0、n=s.charat(I)+n; で文字にアクセスしようとすると文字列インデックスが範囲外になるのはなぜですか?


import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        String A=sc.next();
        int mid = A.length()%2;
    
        if (mid%2==0){
            String S= A.substring(0,mid);
            String n="";
            for(int i=0;i<mid;i++){
                n=S.charAt(i)+n;
            }
            if(S==n) System.out.println("Yes");
            
        }
        if (mid%2!=0){
            String S= A.substring(0,mid-1);
            String n="";
            for(int i=0;i<mid;i++){
                 n=S.charAt(i)+n;
            }
            if(S.equals(n)) System.out.println("Yes");
            
        }
        
        
    }
}

私が試したこと:

why string index is out of bound when i try to access a character at n=S.charAt(i)+n;

私は何をすべきか?

解決策 1

いくつかの問題があります。
1. 10 行目での中間点の計算。剰余を取るのではなく、2 で除算する必要があります。

Java
int mid = A.length()/2; // get the number of characters in half the string

2. mid の値を使用して、文字列の文字数が元の文字列の長さではなく奇数であるかどうかを確認します。
3. 2 つの半分を比較する前に文字列を作成すると、文字列 n は入力の前半を逆にしたものになります。 後半の逆になるはずです。

解決策 2

なぜなら S よりも短いことが保証されています mid 文字の長さ:

String S= A.substring(0,mid-1);

もしも mid は 3、S は 2 文字であるため、ループがインデックス 0、1、および 2 を生成すると、最後のインデックスは範囲外になります。

正直なところ、デバッガーを 1 分使用すると、1/4 時間前に表示されていたはずです…使用方法を学ぶことを強くお勧めします。これにより、将来的に大幅な時間を節約できます。

コメント

タイトルとURLをコピーしました