我对 Java 有点陌生。我试图检查给定参数是否包含元音,如果是,则返回一个单词。这是我到目前为止所拥有的:
public class Main {
public static void main(String[] args) {
String nome = "Leonardo";
int lunghezza = nome.length();
char[] vocali = {'a', 'e', 'i', 'o', 'u'};
System.out.println("Lunghezza parola: " + lunghezza);
if (lunghezza > 5) {
System.out.println("E' una parola piu' lunga di 5 lettere");
} else if (lunghezza < 5) {
System.out.println("E' una parola piu' corta di 5 lettere");
}
if (nome.contains('a','e','i','o','u')) {
System.out.println("Contiene vocali");
}
//System.out.println(nome.contains(vocali));
}
}
当我问你:“嘿,这个单词包含 a、e、i、o 或 u”时,你知道我的意思。但我的问题实际上并不清楚,你只需将一生的人类知识应用于这种情况和一些同理心(你站在我的立场上,弄清楚人们可能会问什么样的问题,并将其作为理解什么的过程的一部分)我是说)。
计算机不是那样的。他们需要被准确地告知要做什么,并且会准确地执行您所说的,无论多么愚蠢。 这是一个 YouTube 视频,一位父亲要求他的孩子们写下花生酱和果冻三明治的食谱,他完全按照它去做(当然,结果是灾难性的搞笑结果)。 编程就是这样。
因此,这个:
if (nome.contains('a','e','i','o','u')) {
不起作用——它甚至没有意义。您是在问它是否至少包含其中 1 个字母吗?都是吗?
通常的解决方案是 - 嗯,它是一种编程语言 - 对其进行编程。不要寻找一个完全符合您要求的“方法”,而应将方法视为非常简单的动词。没有动词表示“把米饭煮8分钟”。有一个动词的意思是“做饭”。您还可以使用其他词语来表示“.. 8 分钟”。永远不会存在精确表示“煮 8 分钟”的动词。同样在这里。没有一种方法。编写执行您想要的操作的代码:
boolean found = false;
for (String vocale : vocali) {
if (nome.contains(vocale)) {
found = true;
break;
}
}
if (found) {
System.out.println("Contiene vocali");
}
额外的复杂性是“动词”“.contains(someChar)”不存在,仅“.contains(someString)”存在,因此将
vocali
数组更改为 String[]
类型并使用双引号解决这个问题。或者使用 .indexOf(someChar) > -1
代替(indexOf does 有一个适用于字符的重载)。
使用流 API,这也可以工作:
boolean found = nome.chars()
.anyMatch(c -> Arrays.binarySearch(vocali, c) > -1);
这要求您按字母顺序编写
vocali
(二分搜索要求您正在搜索的数组已排序)。我假设您在课程中还没有介绍过 lambda(也称为闭包),因此您可能想在稍后忘记这些anyMatch
内容。