第一个字符出现在字符串中的次数

时间:2013-09-29 18:07:35

标签: java string for-loop count user-input

我想要实现的目标:

编写一个程序,要求用户输入一个String。然后输出该String的第一个字母出现的次数。假设用户将输入一个包含全部大写字母的String。例如,如果用户输入“PETER PIPER PICKED PICK 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);
    }
}

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

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

5 个答案:

答案 0 :(得分:0)

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

char firstChar = userInput.charAt(0);

可变地跟踪您找到的匹配数量:

int count = 0;

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

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

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

答案 1 :(得分:0)

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

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

然后你可以在 for循环之后打印出计数(这意味着在for循环的大括号之后。如果你还有任何问题,请改变原来的问题。

答案 2 :(得分: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);
 }
}

答案 3 :(得分: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);

}

}

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); } }

这将为您提供您想要产生的输出....

答案 4 :(得分:0)

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

现在这可能很难,因为您似乎不明白为什么您的代码正在执行它现在正在做的事情。一旦你理解了它 - 逐行 - 它应该更容易实现你想要的结果。

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

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

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

int count = userInput.indexOf(0);

此方法正在使用indexOf(int)。你问“字符0的第一次出现(索引)在哪里(null character)。这没有用,因为你想要的是相反的 - 你想要索引的第一个字符 0 。这就是charAt所做的。String的文档很有帮助 - 阅读它们。

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

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

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

启动一个循环,i为0并递增,直到字符串的最后一个索引。这对我来说是对的。

但是,请注意,您尚未包含{来打开 - 这意味着只有下一个语句(直到下一个分号)才会包含在循环中。这并不意味着你的代码被破坏了,但是如果你添加了你想要在循环中的更多语句,这很容易在以后变成一个bug。

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

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

另请注意,如果块(同样,{ ... })的工作方式与循环相同。最佳做法是在每个ifelseforwhile等处使用它们,直到您真正知道自己在做什么为止。这样你就不会意外地绊倒。

    count++;

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

    System.out.println(count);

对我来说很好看,除了记住这不在循环块中,但你已经缩进它了。