【问题标题】:How to convert user input string to pig latin?如何将用户输入字符串转换为猪拉丁语?
【发布时间】:2015-11-28 14:08:31
【问题描述】:

我试图将用户输入的以辅音开头的字符串转换为 pig latin buy 将所有辅音移动到单词的末尾,直到单词以元音开头,然后在单词的末尾添加“ay” .我有一个应该执行此操作的 for 循环,但由于某种原因,它什么也不输出。我在这里做错了什么?我难住了。

代码如下:

import java.util.Scanner;

public class two {
    public static void main(String[] args) {

        System.out.println("Please enter a word");
        Scanner word = new Scanner(System.in);
        String pigLatin = word.nextLine();
        while (!pigLatin.equalsIgnoreCase("quit")) {
            if (isVowel(pigLatin.charAt(0))) {
                pigLatin = (pigLatin + "way");
                System.out.println(pigLatin);
            } 
            else {
                for (int i = 0; i < pigLatin.length(); i++) {
                    char firstChar = pigLatin.charAt(0); 
                    pigLatin = pigLatin.substring(1);
                    pigLatin = pigLatin + firstChar;
                    if (i >= pigLatin.length())
                    {
                        pigLatin = pigLatin + "ay";
                        System.out.println(pigLatin);
                    }
                }

            }

            System.out.println("Please enter a word");
            pigLatin = word.nextLine();
        }
        word.close();

    }

    private static boolean isVowel(char ch) {
        char v = Character.toLowerCase(ch);
        if (v == 'a' || v == 'e' || v == 'i' || v == 'o' || v == 'u') {
            return true;
        }

        else {
            return false;
        }

    }

}

【问题讨论】:

  • 并不是说这可以解决任何问题,但是:if(condition){return true;}else{return false;} 可以简化为return condition;
  • 使用 char 数组 (myString.toCharArray()) 可能是直接使用字符串的更好方法。

标签: java if-statement for-loop while-loop


【解决方案1】:

你需要在 i 上小于或等于

                for (int i = 0; i <= pigLatin.length(); i++) {
                    char firstChar = pigLatin.charAt(0); 
                    pigLatin = pigLatin.substring(1);
                    pigLatin = pigLatin + firstChar;
                    if (i >= pigLatin.length())
                    {
                        System.out.println(pigLatin);
                    }
                }

【讨论】:

  • 当然这不是你需要改变的全部,但它至少可以让你得到你想要的输出;)
  • 哈哈哈我觉得自己好蠢。太感谢了!我让它工作了:)))
【解决方案2】:

你的 for 循环条件是

i < pigLatin.length()

你说如果

if(i >= pigLatin.length()){....}

所以这个条件永远不会成立,因此没有输出,

见下面的代码,

import java.util.Scanner;

/**
 *
 * @author rahmat waisi
 */
public class PigLatin {

    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            while (true) {
                // System.out.print("Please enter a word: , Enter [ quit ] for exit : ");
                String pigLatin = scanner.nextLine();
                if (pigLatin.equals("quit")) {
                    break;
                }
                if (isVowel(pigLatin.charAt(0))) {
                    pigLatin += "ay";
                    System.out.println(pigLatin);
                } else {
                    String output = "";
                    int separation_index = findFirstVowel(pigLatin);
                    if (separation_index ==-1) {
                        System.out.println(pigLatin+"ay");
                        continue;
                    }
                    output+= pigLatin.substring(separation_index);
                    output+= pigLatin.substring(0, separation_index) + "ay";
                    System.out.println(output);
                }
            }
        }
    }

    private static boolean isVowel(char ch) {
        char v = Character.toLowerCase(ch);
        return v == 'a' || v == 'e' || v == 'i' || v == 'o' || v == 'u';
    }

    private static int findFirstVowel(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (isVowel(str.charAt(i))) {
                return i;
            }
        }
        return -1;
    }

}

这里有一些输入:

pig
banana
trash
happy
duck
glove
eat
omelet
are
ffff
quit

他们的输出是:

igpay
ananabay
ashtray
appyhay
uckday
oveglay
eatay
omeletay
areay
ffffay

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多