试图在字符串中输出*的出现次数

时间:2016-03-26 08:23:37

标签: java

这是我的头脑。我正在尝试计算从输入扫描仪中获取的用户输入中出现的*的数量。但每次我尝试时,它要么继续添加前一行的数字,要么拒绝输出任何内容。感到失落和沮丧,因为我无法看到代码的任何问题。有人可以告诉我我做错了什么。 编译器没有给出语法错误,我也看不到逻辑错误。

import java.util.Scanner;

public class lab11{

public static void main(String[] args){
        Scanner kb = new Scanner(System.in);
        String input;
        input = kb.nextLine();
        int count = 0;
        while(!input.equals("#")){
                input = kb.nextLine();
                for(count = 1; count < input.length(); count ++){
                        int starCount = 0;
                        if(input.charAt(count)=='*'){
                                starCount++;

                        }//if
                        System.out.println(starCount);
                }//for
        }//while


}//main

}//class

5 个答案:

答案 0 :(得分:1)

您正在for循环中初始化starCount,以便在每次迭代后获得0。 此外,count应该从0&amp;你的System.out.println(starCount);语句应该在for循环之后,你必须为每个用户输入打印一次starCount的最终值。

像这样修改你的代码:

import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
            Scanner kb = new Scanner(System.in);
            String input="";
            int count = 0;
            while(true){
                    input = kb.nextLine();
                    if(input.equals("#"))
                        break;

                    int starCount=0;
                    for(count = 0; count < input.length(); count ++){
                            if(input.charAt(count)=='*'){
                                    starCount++;
                            }//if
                    }//for
                    System.out.println(starCount);
            }//while
        }//main
}

答案 1 :(得分:0)

在while循环中,while loopinput = kb.nextLine();似乎存在问题。

如果您只需要在字符串中计算'*',那么下面的内容应该适合您。

public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        String input;
        input = kb.nextLine();
        int count = 0;
        int starCount = 0;
        for (count = 0; count < input.length(); count++) {
            if (input.charAt(count) == '*') {
                starCount++;

            }//if
        }//for
        System.out.println(starCount);


    }//main

答案 2 :(得分:0)

你应该/可以这样做:

String input = "abc*defde *d z*dz *";

final long count = input.chars( )
                        .filter( c -> c == '*' )
                        .count( );

使用Stream API

是Java 8上的单线程

答案 3 :(得分:0)

您的代码中有三个问题1)您正在用第二行替换用户输入的第一行。所以第一行永远不会被考虑。 2)for循环中的变量在每次循环迭代中初始化。因此,如果当前char为* else,则计数为1。3)启动循环,计数值为0而不是1.尝试下面的代码

public static void main(String[] args){
            Scanner kb = new Scanner(System.in);
            String input;
            input = kb.nextLine();
            int count = 0;
            while(!input.equals("#")){
                int starCount = 0;
                    for(count = 0; count < input.length(); count ++){
                            if(input.charAt(count)=='*'){
                                    starCount++;

                            }//if
                    }//for
                    System.out.println(starCount);
                    input = kb.nextLine();
            }//while


    }//main

答案 4 :(得分:0)

  1. 您的第一行输入尚未使用。
  2. 在for循环中,
  3. 应该从0开始计算。
  4. 似乎starcount的声明应该放在while循环而不是for循环中。所以它可以计算*。
  5. 的数量