在 Java 中使用 switch-cases 和布尔值评估字符串中的字母

Evaluating letters in a string using switch-cases and booleans in Java

我正在上课,我们最近开始学习 Java。 我有一项任务是使用 switch-cases 和布尔值来识别 pangrams。任务状态:

  1. Create a String ‘sentence’ with the value “Sixty zippers were quickly picked from the woven jute bag.”

  2. Create 26 Boolean variables named a to z

    a. Boolean a, b, … y, z;

    b. a, b, … y, z = true;

  3. Create a loop that will iterate over each letter of the sentence

    a. Be careful of the iterator you use within your loop as the letter ‘i’ will already be taken!

  4. Using switch-cases and the Booleans you made, identify the letter and set the corresponding Boolean to true.

  5. Once the sentence has been fully processed, evaluate the value of each Boolean:

    a. Should all of them be true, print the message ‘the sentence “” is a pangram!’

    b. Should any of them be false, print the message ‘the sentence “” is not a pangram!’

我不确定是否只是任务的措辞让我感到困惑,但我不确定如何执行它。 这是我目前得到的:

String sentence = "Sixty zippers were quickly picked from the woven jute bag.";
        Boolean a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
        
        a = b = c = d = e = f = g = h = i = j = k = l = m = n = o = p = q = r = s = t = u = v = x = y = z = true;
        
            for (int letter = sentence.length() - 1; letter <= 0; letter++) {
                
                int character = sentence.charAt(letter);
                
                switch(character) {
                case a:
                case b:
                case c:

我这样操作的时候,显然是不会转换的,那我怎么评价每个字符呢?

你在不完整的解决方案中有很多错误。这看起来像是一项学校作业,所以我不是在编写代码,但这里有一些您应该解决的问题。

  • 不要将布尔标志初始化为 true。将它们设置为 true 时 你遇到那个角色。
    • 您可能希望将标志的类型更改为原始布尔值and/or您希望将它们初始化为 false。
  • 您已将 character 定义为 int,但它实际上应该是 char
    • 请注意,由于隐式转换,使用 int 会起作用,但它可能会令人困惑。
  • 案例名称应该用单引号括起来,以表明它们是字符而不是 比你一开始定义的变量。
  • 在每种情况下,设置适当的标志并中断以防止 fall-through 赋值
  • for-loop设置错误。您从最后开始并递增,因此它会立即停止。
    • 从头开始(即将letter初始化为0)
    • 更改条件以覆盖字符串的长度
    • 增量器没问题。

正如评论中指出的,for 循环不正确。按顺序遍历字符:

for (int letter = 0; letter < sentence.length(); letter++) {

从字符串中获取字符时,将其转换为小写(否则,'a''A' 都需要单独的 case):

char character = Character.toLowerCase(sentence.charAt(letter)); 

开关语句:

switch(character) {
    case 'a': 
        a = false; 
        break; // needed to avoid fall-through to case 'b'
    case 'b': 
        b = false; 
        break; 
    ...

现在您可以测试是否所有变量都设置为 false:

boolean isPangram = !a && !b && ... && !z;

如果变量在开始时设置为false,在循环中设置为true,代码会更简单明了。