-4

这是我一直在使用的代码,但它适用于不是 pangram 但不是其他方式的字符串。也适用于有重复的字符串。

int i;
char l,ch;
String s="";
Scanner sc= new Scanner(System.in);
s=sc.next();
s=s.trim();
int c=0;
s=s.toLowerCase();
for (l='a';l<='z';l++) {
  for(i=0;i<s.length();i++) {
    ch=s.charAt(i);
    if(ch==l) {
      c++;
    }
  }
  if(c==0)
    break;
  else {
    c=0;
    continue;
  }
}
if(l=='z')
  System.out.println("pangram");
else
  System.out.println("not pangram");
4

1 回答 1

0

您正在检查循环后l是否等于。z如果除了句子中的每个字母都z存在,那么你会得到一个误报,因为lwill equal z

在这里,您l为每个循环递增:

for (l='a'; l<='z'; l++)

在最后一个循环之后(当lequals时zl将再增加一次。

您需要做的是检查是否l大于z

if (l > 'z')
  System.out.println("pangram");
...

编辑

sc.next()将返回一个字符串到下一个标记。(行尾或空格)
如果您输入We promptly judged antique ivory buckles for the next prize s将只包含We,因为空格将被视为next(). 你需要sc.nextLine()改用。

于 2016-08-28T20:32:43.697 回答