Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建Ubbi Dubbi转换器_Java - Fatal编程技术网

在Java中创建Ubbi Dubbi转换器

在Java中创建Ubbi Dubbi转换器,java,Java,我在一个入门java类中,对于我的一个程序,我希望创建一个ubbi dubbi翻译程序,它在每个元音和元音集群之前都发布一个ub。我不知道如何让我的程序正确运行,也不知道如何让它排除集群中包含的额外元音。我不允许使用Stringbuilder public void buttonPressed() { String lowerCase = ""; String userInput = input.getText(); Scanner words = new Sc

我在一个入门java类中,对于我的一个程序,我希望创建一个ubbi dubbi翻译程序,它在每个元音和元音集群之前都发布一个ub。我不知道如何让我的程序正确运行,也不知道如何让它排除集群中包含的额外元音。我不允许使用Stringbuilder

public void buttonPressed()
    {

    String lowerCase = "";
    String userInput = input.getText();
    Scanner words = new Scanner( userInput );
    String ubbiDubbi = "";
    //Splits up user input by line


    while (words.hasNext()) {
        //Converting to lower case.
        lowerCase = words.next().toLowerCase();
        System.out.println(lowerCase);

    }
    for (int i = 0; i < lowerCase.length(); i++) {
            if (lowerCase.charAt(i+1) == 'a'){
                    ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
             }

                else if (lowerCase.charAt(i+1) == 'e') {
                            ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }


                else if (lowerCase.charAt(i+1) == 'i'){
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }

                else if (lowerCase.charAt(i+1) == 'o'){
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }

                else  if (lowerCase.charAt(i+1) == 'u') {
                                ubbiDubbi = ubbiDubbi + lowerCase.charAt(i+1);
                }


                 else {
                     ubbiDubbi += lowerCase.charAt(i);

               }   
public void按钮按下()
{
字符串小写=”;
字符串userInput=input.getText();
扫描器字=新扫描器(用户输入);
字符串ubbiDubbi=“”;
//按行拆分用户输入
while(words.hasNext()){
//转换成小写。
小写=words.next().toLowerCase();
System.out.println(小写);
}
for(int i=0;i
要让这个翻译程序正常工作,你基本上只需要逐级检查输入中的每个字符并将其写入输出。此外,如果输入是元音,你需要先写出“ub”,除非前面的字符也是元音

有一件事很方便,那就是能够识别元音。从为元音编写函数开始是个好主意。它可能看起来像:

    private boolean isVowel(char c) {
        return
            c == 'a' || c == 'A' ||
            c == 'e' || c == 'E' ||
            c == 'i' || c == 'I' ||
            c == 'o' || c == 'O' ||
            c == 'u' || c == 'U';
    }
现在,如果您查看翻译,就可以看到这一点了,我们希望跨过输入中的每个字符并将其写入输出。这可能如下所示:

    private String translate(String raw) {
        String translated = ""; 
        for(char c:raw.toCharArray()) {
            // some extra stuff needed here
            translated += c;
        }
        return translated;
    }
public class UbbiDubbi {

    private boolean isVowel(char c) {
        return
            c == 'a' || c == 'A' ||
            c == 'e' || c == 'E' ||
            c == 'i' || c == 'I' ||
            c == 'o' || c == 'O' ||
            c == 'u' || c == 'U';
    }

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                if(!wasLastCharacterVowel) {
                    translated += "ub";
                }
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }

    public void buttonPressed() {
        String userInput = "";// = input.getText();
        Scanner words = new Scanner( userInput );
        while (words.hasNext()) {
            String lowerCase = words.next().toLowerCase();
            String translated = translate(lowerCase);
            System.out.println(translated);
        }
        words.close();
    }


    public static void main(String...none) {
        System.out.println(new UbbiDubbi().translate("The quick brown fox jumps over the lazy aadvark"));
    }
}
对于额外的内容,您需要知道当前字符是否为元音,以及前一个字符是否为元音,因此我们可以添加一些内容:

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;  // 

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }
最后,如果需要,您可以检查字符是否为元音,以及最后一个字符是否为元音:

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                if(!wasLastCharacterVowel) {
                    translated += "ub";
                }
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }
有了它,你只需要连接按钮按下动作等,所以看起来可能有点像这样:

    private String translate(String raw) {
        String translated = ""; 
        for(char c:raw.toCharArray()) {
            // some extra stuff needed here
            translated += c;
        }
        return translated;
    }
public class UbbiDubbi {

    private boolean isVowel(char c) {
        return
            c == 'a' || c == 'A' ||
            c == 'e' || c == 'E' ||
            c == 'i' || c == 'I' ||
            c == 'o' || c == 'O' ||
            c == 'u' || c == 'U';
    }

    private String translate(String raw) {
        String translated = "";
        boolean wasLastCharacterVowel = false;

        for(char c:raw.toCharArray()) {
            if(isVowel(c)) {
                if(!wasLastCharacterVowel) {
                    translated += "ub";
                }
                wasLastCharacterVowel = true;
            } else {
                wasLastCharacterVowel = false;
            }
            translated += c;
        }
        return translated;
    }

    public void buttonPressed() {
        String userInput = "";// = input.getText();
        Scanner words = new Scanner( userInput );
        while (words.hasNext()) {
            String lowerCase = words.next().toLowerCase();
            String translated = translate(lowerCase);
            System.out.println(translated);
        }
        words.close();
    }


    public static void main(String...none) {
        System.out.println(new UbbiDubbi().translate("The quick brown fox jumps over the lazy aadvark"));
    }
}

添加main方法提供了一种测试翻译的简单方法。希望这能有所帮助。

这是有意义的,我对数组非常不熟悉,所以我甚至没有考虑过这一点。唯一的问题是我需要它来阅读每个单词,我必须使用while循环将其拆分为新行。我如何才能做到这一点,以便它能够阅读每一行?谢谢r您目前的帮助!您可以将该逻辑添加到buttonPressed()中,转换方法不需要更改。我已编辑了答案,将扫描仪包含在buttonPressed()中。是的,我刚刚通过将输出实现到while循环中来计算出代码。有没有办法让它读取每一行而不是最后一行?抱歉,我一直被难住了。当然,您需要将翻译逻辑移动到while循环中。目前,您的while循环在到达t之前终止翻译逻辑。结果是,您的翻译逻辑只看到最后一个设置为小写的值