0

我必须做一个 java 实验室,它将输入一个句子并创建一个新字符串,其中只有以元音开头的单词。

例子:

输入:这是一个炎热潮湿的夏日。

输出:Itisaand。

编辑:我得到的输出是anananananan。

这是我的代码(带注释)。方法很简单。我只是不确定为什么这不起作用。

import java.util.*;

public class Driver {

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.print("Input: ");
        String input = console.nextLine();
        Class strings = new Class(input);
        // class has constructor for input
        int beg = 0, end = 0;
        for (int j = 0; j < input.length(); j++) {
            if (strings.isVowel(j) && (input.charAt(j - 1) == ' ' || j == 0))
                beg = j;
            // isVowel finds if there is a vowel at the location
            else if (strings.endWord(j))
                end = j - 1;
            // endWord finds if there is a space or punctuation at the location

            if (beg == end - 2)
                strings.findWord(beg, end);
            // findWord adds a substring of input from beg to end to the answer
        }
        System.out.print("\nOutput: ");
        strings.printAnswer();
        // printAnswer prints the answer
    }
}

编辑:这是我班级的代码。

public class Class {

    String input = "", answer = "";

    public Class(String input1) {
        input = input1;
    }

    public boolean isVowel(int loc) {
        return (input.charAt(loc) == 'a' || input.charAt(loc) == 'e' || input.charAt(loc) == 'i'
                || input.charAt(loc) == 'o' || input.charAt(loc) == 'u');
    }

    public boolean endWord(int loc) {
        return (input.charAt(loc) == ' ' || input.charAt(loc) == '.' || input.charAt(loc) == '?'
                || input.charAt(loc) == '!');
    }

    public void findWord(int beg, int end) {
        answer = answer + (input.substring(beg, end));
    }

    public void printAnswer() {
        System.out.println(answer + ".");
    }

}
4

3 回答 3

0

我不会为你编写 Java 代码,但会给你一些合乎逻辑的步骤。

while(true)
    start = input.indexOf(" ")
    if(start == -1)
        break
    end = input.index of(" ", start)
    if(end == -1)
        word = input.substr(start, input.length-1)
    else
        word = input.substr(start, end)
    if first letter of word is a vowel
        save it
    if(end == -1)
        break

您的逻辑绝对正确,但不是解决问题的最佳方法

编辑:

然而,对你来说,解决方案很简单。

你可以做

if(beg < end)

一切都会奏效。

于 2013-10-11T13:17:39.150 回答
0

可能还有其他问题,但逻辑最直接的问题是这部分:

if(beg==end-2)
    strings.findWord(beg, end);

那只会识别两个字符单词,因此即使“a”或“and”有效,也不会匹配它们。

于 2013-10-11T13:04:55.743 回答
0

input.charAt(j - 1)IndexOutOfBoundsException什么时候j会抛出0

于 2013-10-11T13:05:21.197 回答