2017-04-27 5 views
-4

私はこのコードをgoogle foobarチャレンジに使用しようとしていますが、10個の隠れたテストケースのうちの2つを渡すことはできません。コードでは、文字列を受け取り、それと同等のアルファベット文字を逆順に置き換えてデコードします。このコードは大文字と句読点を無視します。FooBar Javaの逆アルファベットコード

 public static void main(String[] args) 
{ 
    System.out.println(answer("wrw blf hvv ozhg mrtsg'h vkrhlwv?")); 
} 

public static String answer(String s) { 

    String decode = ""; 
    char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 
    char[] alphabet2 = "zyxwvutsrqponmlkjihgfedcba".toCharArray(); 

    for(int i = 0; i < s.length(); i++) 
    { 
     int cint = (int)s.charAt(i); 

     boolean b = Character.isUpperCase(s.charAt(i)); 
     if(b) 
     { 
      decode = decode + s.charAt(i); 


     } 

     if(!Character.isDigit(s.charAt(i)) && !Character.isLetter(s.charAt(i))) 
     { 
      decode = decode + s.charAt(i); 
     } 
     else 
     { 
      if(!b) 
      { 
      int h = search(s.charAt(i), alphabet); 
      decode = decode + alphabet2[h]; 
      } 
     } 

    } 

    return decode; 

    // Your code goes here. 

} 
public static int search(char x, char[] y) 
{ 
    int p = 0; 
    for(int o = 0; o < y.length; o++) 
    { 
     if(y[o] == x) 
     { 
      p = o;; 
     } 
    } 
    return p; 
} 
+1

アルファベットの文字(実際は小文字のみ)をエンコードするという質問があるので、数字のチェックポイントは何ですか? – ajb

答えて

0

コードでは数字は無視されません。今すぐ、abc1234def - >zyxzzzzwvu、それがzyx1234wvuであると仮定したとき。

コードを簡略化してみてください。ジャンプする前にそれについて考える時間を費やしてください。どこでもif文を混乱させると、物事を理解してデバッグするのが難しくなります。

public static String answer2(String s) 
{ 
    String decoded = ""; 
    String alphabet = "abcdefghijklmnopqrstuvwxyz"; 
    String alphabet2 = "zyxwvutsrqponmlkjihgfedcba"; 

    for (char c : s.toCharArray()) { 
     if (c < 'a' || c > 'z') { 
      // This is not a letter. Just repeat it verbatim. 
      decoded += c; 
     } else { 
      // This is a letter. Flipify it. 
      int pos = alphabet.indexOf(c); 
      decoded += alphabet2.charAt(pos);    
     } 
    } 
    return decoded; 
} 

このコードが失敗すると、問題の制約を完全に記述していない可能性があります。おそらく、いくつかのコピー+ペーストが整っているかもしれません。