【问题标题】:Non Executing Loop and Sub Array非执行循环和子数组
【发布时间】:2013-07-21 12:53:27
【问题描述】:

我正在尝试为数组中的特定单词连续查找最多数量的辅音。我在中间有一个我评论过的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");
            }
        }
    }
}

【问题讨论】:

  • (使用** 突出显示在“代码”部分中不起作用。)
  • k 是否小于 5?
  • k 是子串 (0,1) 的长度,所以是的,它应该从长度 1 开始
  • 应该总是小于五个
  • 您是否打算仅在您的字符串 a(似乎只是一个字符串)不包含任何元音时才运行该 while 循环? `因为这就是你所拥有的......

标签: java loops sub-array


【解决方案1】:

鉴于您对“尝试为数组中的特定单词连续查找最多数量的辅音”的描述,我认为这些方面的内容(未编译或测试 - 只是为了展示方法)将是更容易遵循/调试/测试/维护(也只查看当前的word[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 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
  { ...
  }

【讨论】:

  • 我试试这个,我只找词首的辅音组
  • 它找不到 words.subsequence 以及从哪里开始 if 语句,它们应该是我已经拥有的还是 while 循环中的新语句?
  • String.subsequence() 自 JDK 1.4 以来一直存在。我可能会因为在那里使用word 作为变量而使您感到困惑-在您的情况下可能是words[i]-假设wordString,而不是您的words,这是String[] ...
  • 还是找不到方法。另外,你知道如何找到一个子数组或基本上以类似于 string.substring(int,int) 的方式从数组中取出一个元素吗?
  • 实际上是 String.subSequence() - 我错过了 cAmELcAse 位。 Arrays.copyOfRange() 可能就是你想要的。如需完整的 API 参考,请参阅here
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
相关资源
最近更新 更多