有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的拼字数组

所以对于一个类,我需要制作一个程序,根据字母的拼字值为一个单词打分。所以aa应该是2,因为1a值1分。但由于某些原因,我的程序只显示aa为1分

import java.util.Scanner;

public class Scrabble {   
       public static void main(String[] args) {
            String[] 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[] values = {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};

            Scanner kboard = new Scanner(System.in);
            System.out.println("Input your word.");

            String choice = kboard.nextLine();

            int score = 0;
            for(int i = 0; i < choice.length(); i++) {
                for(int n = 0; n < 26; n++)   {
                    if(choice.substring(i).equals(alphabet[n]))
                    {
                       score += values[n];
                    }
                }
             }

             System.out.println("The score for your word is " + score);
       }

}

共 (4) 个答案

  1. # 1 楼答案

    尝试以下解决方案:

    import java.util.Scanner;
    
    public class Scrabble {
        public static void main(String[] args) {
            String[] 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[] values = {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};
    
            Scanner kboard = new Scanner(System.in);
            System.out.println("Input your word.");
            String choice = kboard.nextLine();
    
            int score = 0;
            for(int i = 0; i < choice.length(); i++) {
                for(int n = 0; n < 26; n++) {
                    if(choice.substring(i, i + 1).equals(alphabet[n])) {
                        score += values[n];
                    }
                }
            }
    
            System.out.println("The score for your word is " + score);
        }
    }
    

    基本上,您没有正确使用substring() 。您只输入了一个begin索引,这意味着它从该点开始读取,直到字符串结束。我把它改为读取到末尾索引,在您的例子中是i+1

    基本上,在第一次迭代中,你在alphabet中寻找“aa”,只有在第二次迭代中,你在alphabet中只寻找“a”,这就是为什么你在第一次迭代中没有得到第一个“1分”

  2. # 2 楼答案

    问题是someStr.substring(i)不会只返回一个字母。例如,System.out.println("aaa".substring(1));的输出是"aa"而不是a

    以下是一个修改版本:

    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[] values = {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};
    Scanner kboard = new Scanner(System.in); System.out.println("Input your word.");
    String choice = kboard.nextLine();
    int score = 0;
    for(int i = 0; i < choice.length(); i++) {
      for(int n = 0; n < 26; n++) {
        // Use charAt here instead of substring
        if(choice.charAt(i) == alphabet[n])
        {
          score += values[n];
        }
      }
    }
    System.out.println("The score for your word is " + score);
    

    }

    更好的是,您可以只使用字母表的哈希表,避免内部循环

  3. # 3 楼答案

    因为“aa”。子字符串(0)=“aa”哪个!=“a”。所以基本上这是一个昂贵的“分数最后一个字符”

    使用选择。而不是字符(索引)。(另外,您可以使用char-to-map查找跳过对每个char的迭代)

  4. # 4 楼答案

    您使用了错误版本的子字符串,我假设您想要使用substring(int beginIndex, int endIndex)

    此版本的子字符串应允许您仅选择一个字符子字符串来与字母表数组进行比较。但是,当使用substring(int beginIndex)时,子字符串以指定索引处的字符开始,并延伸到此字符串的末尾,这意味着您选择了多个字符子字符串(位于^{时除外)

    或者,要解决手头的问题,只需将if条件更改为:

    if(Character.toString(choice.charAt(i)).equals(alphabet[n]))