-5

我正在尝试编写一个程序来打印输入的用户字符串,并将元音替换为_。由于编译错误,我在程序无法打印的 if 部分遇到问题。

import java.util.Scanner;
public class mathpowers {
    public static void main(String args[])
    {
        Scanner a = new Scanner (System.in);
        System.out.print("Enter string: ");
        String s = a.nextLine();
        int count = 0;
        for (char c : s.toCharArray())
        {
            if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') {
            {
                c = '_';
                System.out.println (c[i]);
            }
        }
        System.out.println("Your string has " + count + " upper case letters.");
    }
}
4

3 回答 3

1

您的代码存在许多问题并且无法编译。

  • 替换c[i]cc是一个char,不是一个String。(你甚至没有i...
  • 您正在打印count,但您从不增加它。
  • 即使你会 count count,你也会在打印时计算元音而不是大写。
  • 您正在分配"_"c打印它,您的输出将始终为_.

也许你想做这样的事情:

Scanner a = new Scanner (System.in);
System.out.print("Enter string: ");
String s = a.nextLine();
String res = "";
for (char c : s.toCharArray())
{
    if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') {
        res = res + '_';
    }
    else
        res = res + c;
}
System.out.println(res); //Will contain the string with the vowels replaced with _

或者..更好的代码:

Scanner a = new Scanner (System.in);
System.out.print("Enter string: ");
String s = a.nextLine();
String[] vals = {"a", "u", "o", "e", "i"};
for(String val : vals)
    s = s.replaceAll(val, "_");
System.out.println(s);
于 2013-03-13T21:48:23.150 回答
1
System.out.println(c[i]);

应该

System.out.println(c);
于 2013-03-13T21:47:05.817 回答
0

首先,需要在第一行import前面的关键字。java.util.Scanner;您还需要{在下面的代码中删除一个额外的

if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') {
{ //<- This is not needed as you have another on on the end of the line above
c = '_';
System.out.println (c[i]);
}
}

同样c在上面的代码中 achar不是数组,因此您只需要调用System.out.println (c);,但您也只需'_'在调用之前分配给 c ,因此您只会打印出_. 另一个问题是您只更改由创建的数组中的值,s.toCharArray()因此您需要在 for 循环之前进行此调用,然后在循环之后使用它来创建一个新字符串以分配给s.

最后,你永远不会增加count,所以你最后打印出来的总是说 0 但我想你稍后会解决这个问题。

如果您还没有使用像EclipseNetBeans这样的集成开发环境 (IDE),我建议您下载一个,因为它会像文字处理器突出显示拼写和语法错误一样向您突出这些错误。

于 2013-03-13T21:50:19.530 回答