【问题标题】:In java how does one loop through each character in a word and then identify what point that character has got and keep adding the point for the word在java中,如何循环遍历单词中的每个字符,然后确定该字符获得的点并继续为单词添加点
【发布时间】:2025-12-08 02:30:01
【问题描述】:

这是一个我无法理解的任务。这是我对 Java 的第一次真正的尝试,到目前为止我发现它非常困难。我已附上作业PDF,这是我未能成功的pointsProblem部分。

到目前为止,我有:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import java.util.HashMap;

public class WordGames {

    static HashMap<Character, Integer> valueOfCharacter;
    static final String DICTIONARY = "dictionary.txt";
    static int i;
    static int wordCount;
    static String line;
    static String substringWordList;
    static String[] randomSubstringResults = new String[23];
    static FileReader listOfWordsFile;
    static Scanner substringProblemInput;
    static Scanner wordListFileScanner;

    static {

        substringProblemInput = new Scanner(System.in);
        try {
            listOfWordsFile = new FileReader(DICTIONARY);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        wordListFileScanner = new Scanner(listOfWordsFile);

        while (wordListFileScanner.hasNextLine()) {
            line = wordListFileScanner.nextLine();
            randomSubstringResults[wordCount] = line;
            wordCount++;
        }
    }

    static {

        valueOfCharacter = new HashMap<Character, Integer>();

        valueOfCharacter.put('l', 1);
        valueOfCharacter.put('e', 1);
        valueOfCharacter.put('n', 1);
        valueOfCharacter.put('i', 1);
        valueOfCharacter.put('o', 1);
        valueOfCharacter.put('r', 1);
        valueOfCharacter.put('t', 1);
        valueOfCharacter.put('s', 1);
        valueOfCharacter.put('a', 1);
        valueOfCharacter.put('u', 1);
        valueOfCharacter.put('d', 2);
        valueOfCharacter.put('g', 2);
        valueOfCharacter.put('b', 3);
        valueOfCharacter.put('c', 3);
        valueOfCharacter.put('m', 3);
        valueOfCharacter.put('p', 3);
        valueOfCharacter.put('f', 4);
        valueOfCharacter.put('h', 4);
        valueOfCharacter.put('v', 4);
        valueOfCharacter.put('w', 4);
        valueOfCharacter.put('y', 4);
        valueOfCharacter.put('k', 5);
        valueOfCharacter.put('j', 8);
        valueOfCharacter.put('x', 8);
        valueOfCharacter.put('q', 10);
        valueOfCharacter.put('z', 10);

    }

    static void gameMenuSelection() throws FileNotFoundException {

        int getSelectionOption;

        Scanner gameMenuSelectionInput = new Scanner(System.in);

        System.out.println("Welcome to the Word Games program menu.");
        System.out.println("Select from one of the following options.");
        System.out.println("1. Substring problem.");
        System.out.println("2. Points problem.");
        System.out.println("3. Exit.");
        System.out.print("Enter your selection: ");

        getSelectionOption = gameMenuSelectionInput.nextInt();
            switch (getSelectionOption) {
                case 1:
                    substringProblemGame();
                    break;
                case 2:
                    pointsProblemGame();
                    break;
                case 3:
                    System.out.println("\n" + "Goodbye!");
                    break;
                default:
                    System.out.println("Invalid option. Try again.");
                    break;
            }
        }

    static void substringProblemGame() throws FileNotFoundException {

        String randomSubstringInput;
        String wordHasInfix = " - infix";
        String wordHasPrefix = " - prefix";
        String wordHasSuffix = " - suffix";
        String nothingIsFound = " - not found";

        System.out.println("\n" + "Substring problem.");

        System.out.print("Enter a substring: ");
        randomSubstringInput = substringProblemInput.next();


        for (i = 0; i < wordCount; i++) {

            substringWordList = randomSubstringResults[i];
            boolean found = false;

            if (randomSubstringResults[i].startsWith(randomSubstringInput)) {
                substringWordList = substringWordList + wordHasPrefix;
                found = true;
            }
            if (randomSubstringResults[i].endsWith(randomSubstringInput)) {
                substringWordList = substringWordList + wordHasSuffix;
                found = true;
            }
            if (randomSubstringResults[i].contains(randomSubstringInput)) {
                substringWordList = substringWordList + wordHasInfix;
                found = true;
            }
            if (!found) {
                System.out.println(substringWordList + nothingIsFound);
            } else {
                System.out.println(substringWordList);
            }
        }
        System.out.println();
        gameMenuSelection();
    }

    static void pointsProblemGame() throws FileNotFoundException {


        System.out.println("Points problem.");

        }



    public static void main(String[] args) throws FileNotFoundException {


        gameMenuSelection();

    }
}

我尝试实现HashMap,但不知道如何让它工作。我曾尝试从geeksforgeeks 执行此操作,但再次失败。我可能只是没用什么的。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 提示:List&lt;Character&gt; onePointCharacters = "aeilnorstu".chars().mapToObj(e-&gt;(char)e).collect(Collectors.toList());,或者更好:Set&lt;Character&gt; onePointCharacterSet = "aeilnorstu".chars().mapToObj(e-&gt;(char)e).collect(Collectors.toSet());。然后你只需要弄清楚如何将你的字符串变成单词,然后计算出每个单词中字符列表的总和。
  • 这似乎比我认为我需要提供的更先进。我在 Java 上苦苦挣扎,请问您还有什么建议吗?
  • 使用数组可能会更好。小写字符 c 的值是 val[c - 'a'] = x.

标签: java arrays hashmap java.util.scanner filereader


【解决方案1】:

您已经用字母及其相关分数填充了 HashMap。现在,您应该能够通过遍历其中的每个字符并从 Map 中获取值来获取每个单词的相关分数。例如,

    int score = 0;
    for (int i = 0; i < yourArray.length; i++) {
        for (int j = 0; j < yourArray[i].length(); j++) {
            score += hashMap.get(yourArray[i].getCharAt(j));
        }
    }

这里是 hashmap 的文档,您可以在其中查看其所有方法及其用途。 get 方法接受键,在您的情况下是字符,并返回值(相关的分数)。 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

【讨论】: