2016-06-02 8 views
-2

私は以下のJavaの問題を解決しようとしています。誰かが私にこれにアプローチする方法のアイデアを与えることができますか?私はarrを分割し、アルファベットを通り、各文字列を調べるために混乱するfor-loopsの束を使うことしか考えられません。文字列と文字列について混同しています。どんなアドバイスも素晴らしいでしょう。Java:アルファベットに値を割り当て、文字列の値を決定する

-

は文字 '1は、ワードの値は、すべての文字の和であり、「B」が26の価値「Z」と、2価値、等された価値があると仮定するその中の値。大文字で構成される単語の配列arrが与えられた場合、最も大きな値を持つ時計の値を返します。あなたはARRをとることができる持っている長さの少なくとも1

{ "AAA"、 "BBB"、 "CCC"} => 9

{ "AAAA"、 "B"、 "C"} => 4

{ "Z"} => 26

{ ""、 ""} => 0

-

ここで私はこれまでに試みたが、私は失われてるものです:

public static int largestValue(String[] arr){ 
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    int largest = 0; 
    int wordTotal=0; 

    for (int i = 0; i < arr.length; i++){ 
     String[] parts = arr[i].split(""); 

     if (wordTotal < largest){ //I don't think this is in the right place 
      largest = 0; } 

     for (int j = 0; j < alphabet.length(); j++){ 

      for(int k = 0; k <parts.length; k++){ 
       if (alphabet.charAt(j) == parts[k].charAt(0)){ 
        wordTotal = 0; 
        wordTotal += alphabet.indexOf(alphabet.charAt(j))+1; 

       } 
      } 
     } 
    } 
    return largest; 
} 
+3

これまでにどのようなコードを試しましたか? –

+0

要件を分析するときは、要件の信頼性を判断する必要があります。英字のアルファベット順のアルファベット順のアルファベットのアルファベット順のアルファベットのアルファベットのアルファベット順のマッピングは、 。ですから、基本的な文字セットのエンコーディングでシーケンスに頼るのではなく、自分の "アルファベット"を作成するのは良いことだと思います。 (文字列は、Unicode UTF-16コード単位のカウントされたシーケンスです)。 –

答えて

2

start 部分を問題に分解すると、最初の手順は1つを合計することですString。計算するにはsumあなたは(あなたの要件は、あなたの入力が有効であることが保証され言ってますが)の文字が'A''Z'の間であれば、テストを文字を繰り返す文字から'A'charリテラル)を減算し、あなたのsumに追加することができます。何かのように、

static int sumString(final String str) { 
    int sum = 0; 
    for (char ch : str.toCharArray()) { 
     if (ch >= 'A' && ch <= 'Z') { // <-- validate input 
      sum += 1 + ch - 'A';  // <-- 'A' - 'A' == 0, 'B' - 'A' == 1, etc. 
     } 
    } 
    return sum; 
} 

次に、あなたが最大の合計を取得するためにStringの配列(複数可)を繰り返すことができます。 Javaの8+

static int maxString(String[] arr) { 
    return Stream.of(arr).mapToInt(x -> sumString(x)).max().getAsInt(); 
} 

そして、最後に

static int maxString(String[] arr) { 
    int max = sumString(arr[0]); 
    for (int i = 1; i < arr.length; i++) { 
     max = Math.max(max, sumString(arr[i])); 
    } 
    return max; 
} 

またはのようなものは、

public static void main(String[] args) { 
    String[][] strings = { { "AAA", "BBB", "CCC" }, { "AAAA", "B", "C" }, 
      { "Z" }, { "", "" } }; 
    for (String[] arr : strings) { 
     System.out.printf("%s => %d%n", Arrays.toString(arr), maxString(arr)); 
    } 
} 

のような全体の動作を検証し、私は

[AAA, BBB, CCC] => 9 
[AAAA, B, C] => 4 
[Z] => 26 
[, ] => 0 
を取得します
1

私はそれがここでは二つの重要な部分でノートを取るのに役立ちますと思う:

1:あなたは、単一ワードの値を見つけることができるようにする必要があり、それぞれの文字

2の合計であります:すべての単語の値を見つけて最大値を見つける必要があります

文字列内の各要素(文字/文字)と配列内の各要素(単語)を調べる必要があるため、問題は本当に2つのループを使用するように設定されています。私は全体の問題の一部がforループを明確かつ簡潔にしていると思います。これは間違いなく実行可能です。私はそれをあきらめたくありませんが、言葉を与えられて、その言葉の価値を返す機能を持っていると、助けになります。あなたは単語の価値を見いだすことができ、今までの最大のものかどうかを見て、繰り返すことができます。また、単語の値を見つけるには、にしてください。26 if(代わりにASCIIテーブルを参照してください)を使用しないでください。これはあなたにそれを与えることなく、より良い理解を与えることを望む!

関連する問題