Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 Pig拉丁翻译无限循环_Java_Loops_If Statement_Infinite Loop - Fatal编程技术网

Java Pig拉丁翻译无限循环

Java Pig拉丁翻译无限循环,java,loops,if-statement,infinite-loop,Java,Loops,If Statement,Infinite Loop,我一直在做这个Pig拉丁翻译,我已经差不多完成了,除了这两个相同的while循环没有按预期执行之外。当我试着输入一个短语来翻译时,比如我的名字是,它应该是yMay amenay isway。问题是,所指示的循环正在无限地执行,原因我不知道。否则,我已经进行了测试,以确保此代码正常工作。我不知道如何使它工作。有什么想法吗?非常感谢 import java.io.*; import java.util.*; import java.util.Arrays; public class PigLati

我一直在做这个Pig拉丁翻译,我已经差不多完成了,除了这两个相同的while循环没有按预期执行之外。当我试着输入一个短语来翻译时,比如我的名字是,它应该是yMay amenay isway。问题是,所指示的循环正在无限地执行,原因我不知道。否则,我已经进行了测试,以确保此代码正常工作。我不知道如何使它工作。有什么想法吗?非常感谢

import java.io.*;
import java.util.*;
import java.util.Arrays;

public class PigLatin
{
  public static void main (String[] args) 
  {
    System.out.print("Please enter a phrase to translate: ");
    Scanner scan = new Scanner(System.in);
    String str = scan.nextLine();  
    String[] words = str.split("\\s+");
    int period = words.length;
    int spaces = (period - 1);
    String[] word = Arrays.copyOfRange(words,0,spaces);
    for (int i = 0; i < word.length; i++)
    {
        String a = word[i].substring(0,1);
        int b = a.length();
        int c = word[i].length();
        while (b <= 4) //start of thought problem
        {
            if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u")))
            {
                a = word[i].substring(0,b);
                b = b + 1;
                }
            } // end of thought problem
        if (word[i].startsWith("a") || word[i].startsWith("e") || word[i].startsWith("i") || word[i].startsWith("o") || word[i].startsWith("u"))
        {
            System.out.print(word[i] + "way");
            }
        else if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u")))
        {
            String answer = word[i].substring(b,c);
            System.out.print(answer + a + "ay");
            }
        System.out.print(" ");
        }
    String end = "";
    for (String endArray: Arrays.copyOfRange(words,spaces,period))
    {
        end = end + endArray;
        }
    String z = end.substring(0,1);
    int x = z.length();
    int y = end.length();
    while (x <= 4) //start of thought problem
    {
        if (!(z.contains("a") || z.contains("e") || z.contains("i") || z.contains("o") || z.contains("u")))
        {
            z = end.substring(0,x);
            x = x + 1;
            }
        } //end of thought problem
    if (end.startsWith("a") || end.startsWith("e") || end.startsWith("i") || end.startsWith("o") || end.startsWith("u"))
    {
        System.out.print(end + "way");
        }
    else if (!(z.contains("a") || z.contains("e") || z.contains("i") || z.contains("o") || z.contains("u")))
    {
        String answer = end.substring(x,y);
        System.out.print(answer + z + "ay");
        }
    System.out.print(".");
    }
}

如果你格式化你的代码,它会很有帮助

while (b <= 4) //start of thought problem
{
    System.out.println("Watch this never end"); //Add this print line
    if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u")))
    {
        a = word[i].substring(0,b);
        b = b + 1;
    }
 }
同样的道理也适用于

while (x <= 4) //start of thought problem
{
    if (!(z.contains("a") || z.contains("e") || z.contains("i") || z.contains("o") || z.contains("u")))
    {
        z = end.substring(0,x);
        x = x + 1;
    }
}
正如您所看到的,如果您从未进入if语句,您将永远无法退出while循环。尝试改用for循环

for(int b = a.length(); b <=4; b++)

您的代码格式非常好,在这里它被提取到方法中,并重命名了一些变量。我仍然没有修复任何错误,重命名可以扩展

import java.io.*;
import java.util.*;
import java.util.Arrays;

public class PigLatin
{
  String[] GetWords()
  {
    System.out.print("Please enter a phrase to translate: ");
    Scanner scan = new Scanner(System.in);
    String str = scan.nextLine();  
    String[] words = str.split("\\s+");
    int period = words.length;
    int spaces = (period - 1);
    return Arrays.copyOfRange(words,0,spaces);
  }

  bool ContainsVowel(String text)
  {
    return text.contains("a") || text.contains("e") || text.contains("i") || text.contains("o") || text .contains("u")
  }

  bool StartsWithVowel(String text)
  {
    return text.startsWith("a") || text.startsWith("e") || text.startsWith("i") || text.startsWith("o") || text.startsWith("u")
  }

  String PigLatin(String text)
  {
    String prefix = text.substring(0,1);
    int b = a.length();
    int c = text.length();
    while (b <= 4) //start of thought problem
    {
        if (!ContainsVowel(prefix))
        {
            prefix= text.substring(0,b);
            b = b + 1;
        }
    } // end of thought problem
    if (StartsWithVowel(text)
    {
        return text + "way";
    }
    else if (!ContainsVowel(prefix))
    {
        String answer = text.substring(b,c);
        return answer + prefix + "ay";
    }
    return " ";
  }

  public static void main (String[] args) 
  {
    String[] words = GetWords();
    for (int i = 0; i < words.length; i++)
    {
        String translation = PigLatin(words[i]);
        System.out.print(translation + " ");
    }

    String end = "";
    for (String endArray: Arrays.copyOfRange(words,spaces,period))
    {
        end = end + endArray;
    }

    String z = end.substring(0,1);
    int x = z.length();
    int y = end.length();
    while (x <= 4) //start of thought problem
    {
        if (!ContainsVowel(z))
        {
            z = end.substring(0,x);
            x = x + 1;
        }
    } //end of thought problem

    if (StartsWithVowel(end))
    {
        System.out.print(end + "way");
    }
    else if (!ContainsVowel(z))
    {
        String answer = end.substring(x,y);
        System.out.print(answer + z + "ay");
    }
    System.out.print(".");
  }
}
这应该对你的逻辑有很大帮助。它更具可读性,我可以开始理解你想做什么


你可以改进的地方很多。我要做的第一件事是将if startsWith元音移到PigLatinString text方法的开头。这样你就不会做额外的工作,也不会根据错误的假设输入循环。

怎么了?预期输出和当前输出是什么?预期输出要翻译成拉丁语。我想从这些循环中得到的是将a&&z分配给每个单词的辅音或辅音组。当前输出什么都不是,只是无休止的执行。哈哈,我想@AdamSiemion可以读取;。他要求你提供一些示例输入,例如,我的名字是adam,你期望输出是什么,例如,y-may-ame-nay-way,让你的逻辑完全符合你刚才描述的。你不应该真的需要循环这里和我有什么不同?绝对没有什么…但是你应该能够从代码中看到,如果从来没有进入if语句,b或x值永远不会增加,因此在无限循环中。好吧,我该如何修复无限循环?我真的可以使用你的输入,谢谢!