有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (4) 个答案

  1. # 1 楼答案

    代码中有三个问题1)您正在用第二行替换用户输入的第一行。所以第一条线永远不会被考虑。2) for循环中的变量会在每次循环迭代中初始化。因此,如果当前字符为*0,则计数为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
    
  2. # 2 楼答案

    似乎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
    
  3. # 3 楼答案

    您正在for循环内初始化starCount,因此每次迭代后它都会得到0。 而且你的count应该从0开始&;你的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
    }
    
  4. # 4 楼答案

    你应该/可以这样做:

    String input = "abc*defde *d z*dz *";
    
    final long count = input.chars( )
                            .filter( c -> c == '*' )
                            .count( );
    

    它是Java 8上使用流API的一行程序