1

我想要实现的目标:

编写一个程序,要求用户输入一个字符串。然后输出该字符串的第一个字母出现的次数。假设用户将输入一个全大写字母的字符串。例如,如果用户输入“PETER PIPER PICKED A PECK OF PICKLED PEPPERS”,您的程序应该输出“P 出现 9 次”。

到目前为止我所拥有的:

import javax.swing.JOptionPane;

public class counterCharacter {

  public static void main(String[] args)
  {
    String userInput = JOptionPane.showInputDialog("Input a string");
    int count = userInput.indexOf(0);
    for(int i =0; i < userInput.length(); i++)

        if(userInput.charAt(i) == 'a')  
          count++;
        System.out.println(count);
    }
}

这段代码的问题是它只打印字符'a',并且只有它出现在索引点 0 中。我的任务是允许用户输入任何字符串,从用户输入的索引点 0 中获取字符,并且准确计算该字符在输入中重复出现的次数。对于 PETER PIPER 示例,系统应该打印出“6”,因为这是索引 0 位置中的字符出现的次数。但是如果用户输入 abcdcbabcdcda,它应该打印出“3”。

对此的任何帮助将不胜感激,因为我是一名新程序员,错过了一天的课程,现在远远落后并试图赶上。如果可以,请解释您为什么使用您使用的特定代码以及我可以用来学习如何使用该特定东西的任何参考资料。谢谢你!

4

5 回答 5

0

我不愿意给你工作代码,因为给你交作业没有帮助。由于您已经知道如何检索字符,userInput.charAt(n)因此您应该将第一个字符保存为targetCharacter在 for 循环之前使用索引 0。您现在可以使用 for 循环来检查每个字符是否与该字符相等并计算它们。为了更好的可读性,您应该正确缩进代码并使用大括号,如下所示:

if(userInput.charAt(i) == 'a') {
  count++;
}

然后您可以在 for 循环之后打印出计数(这意味着在 for 循环的花括号之后。如果您仍然有任何问题,请更改您的原始问题。

于 2013-09-29T18:17:14.267 回答
0

我会这样尝试:

import javax.swing.JOptionPane;

public class CounterCharacter {
 public static void main(String[] args) {
    String userInput = JOptionPane.showInputDialog("Input a string");
    // Use charAt to retrieve a character at a specific position
    char firstChar = userInput.charAt(0);
    int count=0;

    for(int i =0; i < userInput.length(); i++)
        if(userInput.charAt(i) == firstChar)
      {
         count++;
      }
   System.out.println(count);
 }
}
于 2013-09-29T18:18:33.240 回答
0

public class CountCharacter {

public static void main(String[] args)
{
int count = 1;
String userInput = JOptionPane.showInputDialog("Input a string");
char ch = userInput.charAt(0);
for(int i =1; i < userInput.length(); i++)
{
    if(userInput.charAt(i) == ch)

    count++;
}


System.out.println(count);

}

}

This will give you the output you intended to produce ....

于 2013-09-29T18:19:55.890 回答
0

你已经很好地描述了这个问题,所以你真的需要把你的描述变成代码。

现在这可能很困难,因为您似乎不明白为什么您的代码现在正在执行此操作。一旦你理解了它——一行一行——它应该更容易达到你想要的结果。

我将帮助您了解您现在拥有的东西,您可以将其转化为工作结果:

String userInput = JOptionPane.showInputDialog("Input a string");

获取要操作的输入字符串。

int count = userInput.indexOf(0);

此方法使用indexOf(int)。您在问“字符 0(空字符)的第一次出现(索引)在哪里。这没有帮助,因为您想要的是相反的 - 您想要索引0处的第一个字符。这就是charAt代替。文档forString很有帮助——阅读它们。

不仅如此,您还将此结果分配给count. 为什么?

您需要记住索引处的字符0(提示,一个字符,而不是一个int),但您还需要开始计数 - 如果您在字符串的开头开始循环,则从 0 开始。所以我认为你需要从两个变量开始。

for(int i =0; i < userInput.length(); i++)

从 0开始循环i并递增直到字符串的最后一个索引。这听起来对我来说是正确的。

但是,请注意您没有包含 a{打开- 这意味着只有下一条语句(直到下一个分号)将包含在循环中。这并不意味着您的代码已损坏,但如果您在循环中添加更多语句,这很容易在以后变成错误。

    if(userInput.charAt(i) == 'a')

这会检查字符i是否是'a'- 为什么?您真正需要的是查看它是否与第一个字符匹配。

还要注意 if 块(再次,{ ... })的工作方式与 for 循环相同。if最好在每个, else, for,等上使用它们while,直到您真正知道自己在做什么。这样你就不会不小心被绊倒了。

    count++;

增加计数。如果您是正确的,这就是您想要的count(但不是,请记住)。

    System.out.println(count);

对我来说看起来不错,除了记住这不在循环块中,但你已经像它一样缩进了它。

于 2013-09-29T18:25:16.420 回答
0

首先,您需要存储第一个字符:

char firstChar = userInput.charAt(0);

制作一个变量以跟踪您找到的匹配数量:

int count = 0;

循环遍历字符串并增加计数(如果适用):

for(int i=0; i<userInput.length(); i++){
  if(userInput.charAt(i) == firstChar){
    count++
  }
 }

编辑:您基本上缺少的只是将第一个字母存储在单独的变量中。

于 2013-09-29T18:15:03.497 回答