Java 非执行循环和子数组

Java 非执行循环和子数组,java,loops,sub-array,Java,Loops,Sub Array,我试图找到数组中某个特定单词的一行中最多的辅音。我在中间有一个while循环,我已经说过了,但是由于某种原因,它没有执行。有人知道为什么吗?另外,您可能会注意到,我有一个int空格,因为我试图找到String[]单词的子数组。我该怎么做呢 import java.io.*; import java.util.* import java.util.Arrays; public class Main { public static void main (String[] args) {

我试图找到数组中某个特定单词的一行中最多的辅音。我在中间有一个while循环,我已经说过了,但是由于某种原因,它没有执行。有人知道为什么吗?另外,您可能会注意到,我有一个int空格,因为我试图找到String[]单词的子数组。我该怎么做呢

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

public class Main
{
  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 spaces = (word.length - 1);
    for (int i = 0; i < words.length; i++)
    {
        String a = words[i].substring(0,1);
        int k = a.length();
        int n = words[i].length();
        if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u")))
        {
            while (k < 5) // start while  
            {
                if (n > k)
                {
                    a = words[i].substring(0,k);
                    k = k + 1;
                    }
                }
            } // end while
        if (words[i].startsWith("a") || words[i].startsWith("e") || words[i].startsWith("i") || words[i].startsWith("o") || words[i].startsWith("u"))
        {
            System.out.print(words[i] + "way");
            }
        else if (!(a.contains("a") || a.contains("e") || a.contains("i") || a.contains("o") || a.contains("u")))
        {
            String answer = words[i].substring(k,n);
            System.out.print(answer + a + "ay");
            }
        }
    }
}
import java.io.*;
导入java.util*
导入java.util.array;
公共班机
{
公共静态void main(字符串[]args)
{
System.out.print(“请输入要翻译的短语:”);
扫描仪扫描=新扫描仪(System.in);
String str=scan.nextLine();
String[]words=str.split(\\s+);
int空格=(word.length-1);
for(int i=0;ik)
{
a=字[i]。子串(0,k);
k=k+1;
}
}
}//结束时
if(单词[i].startsWith(“a”)||单词[i].startsWith(“e”)|单词[i].startsWith(“i”)|单词[i].startsWith(“o”)|单词[i].startsWith(“u”))
{
系统输出打印(字[i]+“方式”);
}
如果(!(a.contains(“a”)| a.contains(“e”)| a.contains(“i”)| a.contains(“o”)| a.contains(“u”))
{
字符串答案=单词[i]。子字符串(k,n);
系统输出打印(答案+a+“ay”);
}
}
}
}
鉴于您描述的“试图在一行中为数组中的某个特定单词找到最多数量的辅音”,我认为沿着这些思路(不是编译或测试-只是为了说明方法)可以更简单地遵循/调试/测试/维护(也只查看当前的
单词[I]
-仍然需要一个外部循环来迭代您的单词:

String consgroups[] = word[i].split("[aeiou]"); // split on all vowels
int maxlen = consgroups[0].length, maxidx = 0;
for (int j = ; j < consgroups.length; ++j)    // iterate over groups and find max
  if (consgroups[j].length > maxlen)
  { maxidx = j;
    maxlen = consgroups[i].length;
  }
String consgroups[]=word[i].split(“[aeiou]”;//对所有元音进行拆分
int maxlen=consgroups[0]。长度,maxidx=0;
for(int j=;j最大长度)
{maxidx=j;
maxlen=consgroups[i]。长度;
}
考虑到你对pig拉丁语的评论,我不确定除了单词开头以外的辅音组为什么重要,但也许我误解了你的描述

编辑:现在我已经仔细研究了一下,我认为这种方法可能更有用:

String vowels = "aeiou";
int i = 0;
while ((i < word.length) && (!vowels.contains(word.subSequence(i, i + 1))))
  ++i;
// now word[i] is the first non-vowel character in word
if (i == word.length) // word was all consonants
{ ...
}
else
  if (i) // word has a consonant prefix
  { ...
  }
  else // word starts with a vowel
  { ...
  }
String元音=“aeiou”;
int i=0;
while((i
(用
**
突出显示在“code”部分中不起作用。)k是否曾经小于5?k是一个子串的长度(0,1),因此是的,它应该从长度1开始,它应该始终小于5。只有当字符串
a
时,才打算运行该
,而
循环(看起来只有一个字符串)不包含任何元音?`因为这就是你那里的元音……我会试试这个,我只在单词的开头寻找辅音组。找不到单词。子序列和if语句的起始位置,它们应该是我已经拥有的还是while循环中的新语句?
String.subsequence()
自JDK 1.4以来就一直存在。我可能会把
word
用作变量,这让您感到困惑-在您的情况下,它可能是
words[I]
-假设
word
String
,而不是
words
,后者是
String[]
…它仍然找不到方法。另外,你知道如何找到子数组或基本上以类似于string.substring(int,int)的方式从数组中取出一个元素吗?它实际上是
string.subSequence()
-我漏掉了cAmELcAse位。和
Arrays.copyOfRange()
可能就是您想要的。有关完整的API参考,请参阅。