-2
import java.util.*;

import java.util.Arrays;

public class ScoreCalc {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        int[] score = {1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10};
        System.out.println("Enter word: ");
        String word = in.nextLine();
        int totalScore = 0;
        char[] wordArray = word.toCharArray();
        for(int i=0; i<wordArray.length; i++) {
            System.out.println(wordArray[i]);
            int index = Arrays.asList(alphabet).indexOf(wordArray[i]);
            System.out.println(index);
            totalScore = totalScore + score[index];
        }
        System.out.println(totalScore);
    }
}

これにより、スレッド「メイン」で例外が発生し続けますjava.lang.ArrayIndexOutOfBoundsException:-1

配列アルファベットのどの文字も見つからないので、誰かがplzを助けることができます!

4

3 に答える 3

1

indexOf(wordArray[i])-1を返しています。これは大文字や特殊文字が原因だと思います。最初にこれを実行し、エラーチェックを追加します。

word.toLowerCase().toCharArray()

とにかく、私はそれがはるかにきれいなので、代わりにこのようなことをします:

String alphabet = "abcdefghijklmnopqrstuvwxyz";

その後

int index = alphabet.indexOf(wordArray[i]);
if(index == -1) {
    // handle the special character
} else {
    totalScore += score[index];
}
于 2012-07-12T01:18:28.003 に答える
0

問題の原因は、メソッドの引数Arrays.asListがジェネリック vararg(T... a)であり、プリミティブ文字の配列を使用していることです。

解決策:Character[] alphabet = {'a','b', ...}プリミティブの代わりにオブジェクトを使用します。char[] alphabet = {'a','b', ...}これT...は、オブジェクトの配列として脅威を与えるのではなくchar[] alphabet、1 つのオブジェクトとして使用するため、リストにはその配列への参照のみが含まれます。

于 2012-07-12T11:40:22.740 に答える
0

したがって、これをすべてオブジェクト指向にするために最初に行うことは次のとおりです。

public class CharacterScore  //name this whatever makes you happy
{  
   int value;  
   char character;  

   public CharacterScore(int value, char character)  
   {  
     this.value=value;  
     this.character=character;  
   }  //getters/setters  
}  

次に、メインプログラムで次のようにします。

private static List<CharacterScore> characterScores;  
static  
{  
   characterScores = new ArrayList<CharacterScore>();  
   String alphabet = "abcdefghijklmnopqrstuvwxyz";  
   for(char current : alphabet.toCharArray())  
   {  
     characterScores.add(new CharacterScore((int)Math.random() *10), current));
   }  
} 

ユーザー入力を取得したら、次のようなコードを実行するよう にword変換します。char[]

for(CharacterScore current : characterScores)  
{  
    for(int i = 0; i <wordArray.length; i++)  
    {  
       if(current.getCharacter() == wordArray[i])  
       {  
             recordScore(current.getValue());  
       }  
    }  
}  

これは必ずしも最適な方法ではありませんが、概念を理解するのに役立ちます。

于 2012-07-12T01:28:15.633 に答える