2017-12-07 14 views
0

入力文字列がパリンドロームかどうかをチェックするプログラムを作成しようとしています。私は最終的にそれを最初にchar配列に変換することに成功しましたが、forループのStringから最後のインデックスにアクセスする方法を理解できませんでした。forループ内の文字列から最後のインデックスを取得する方法

import java.util.Scanner; 

public class Task8 { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     boolean isPalindrome = true; 

     System.out.println("Please, enter string!"); 
     String str = sc.nextLine(); 
     char[] chars = str.toCharArray(); 

     for (int i = 0; i < chars.length; i++) {    
      if(chars[i]!= chars[chars.length-i-1]){ 
       isPalindrome = false; 
       break; 
      } 
     } 
     if(isPalindrome){ 
      System.out.println("It is palindrome!"); 
     } 
     if(!isPalindrome){ 
      System.out.println("It isnt a palindrome!"); 
     } 
    } 
} 

これは、それが私のような何かしようとした場合、それが働いているように見えますが、日食を返すエラー、最終的な結果である:、

for(int i = 0; i < str.length(); i++){ 
     if(str.charAt(i)!= str.charAt(str.length(-1-i)){ 
      isPalindrome = false; 
      break; 
     } 
    } 

を私は中括弧(str.charAt(i)!= str.charAt(str.length()-1-i))-1-iを置く場合、それが動作していますなぜ最初のインデックスでは、私は中括弧の中にiを入れさせることができ、最後のインデックスでは、中括弧の中にi-1を使用できません。

+1

私はあなたが配列の要素にアクセスしてlengthメソッドを呼び出す間に混乱していると思います。 'chars [chars.length-i-1])'は 'str.length(-1-i)'と同じではありません。 '[]'と '()'には大きな違いがあります。また、あなたのコードでエラーが発生した場合は、_showそれをus_に送ります。 – csmckelvey

答えて

2

length()メソッドはパラメータをとりません。 インデックスパラメータをとるのはcharAt(...)メソッドです。

btw入力文字列の途中までは十分です。

for (int i = 0; i < str.length()/2; i++) { 
    if (str.charAt(i) != str.charAt(str.length() -i - 1)) { 
     isPalindrome = false; 
     break; 
    } 
} 
0

str.length(-1-i)が正しい構文ではありません、str.length() APIは引数を使用しませんし、それが唯一の目的はあなたに与えられた文字列の長さを与えることであるのです。

関連する問題