有 Java 编程相关的问题?

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

java这个代码有什么问题?

由于某种原因,我输入的任何东西我都会得到空行 我试图制作一个程序来读取输入,删除所有不必要的空格,但每个单词之间只有一个空格。然后把所有的行都打印出来

不使用任何哨兵来阻止

import java.util.Scanner ;
import java.lang.Character;
import java.lang.String ;
public class trim
{
        public static void main (String[]args)
        {

          String SongName = " " ;
          String Song = " " ;
          int i = 0 ;
          int count = 0 ;

                 Scanner scan = new Scanner(System.in);
                while(scan.hasNextLine())
                {
                  count++;
                  scan.nextLine();
                }


                 for (  ; i < count ; i ++)
                 {
                   if (scan.hasNext())
                   {
                    SongName =scan.nextLine() ;
                    SongName = SongName.trim() ;
                    SongName = SongName.replaceAll("\\s+"," ");
                    if (Song== " " )
                    {
                    Song = SongName;
                    }
                    else
                    {
                    Song  = Song + "\n" +SongName ;
                    }
                   }
                   System.out.println(Song) ;

                }

         }
}

共 (3) 个答案

  1. # 1 楼答案

    while(scan.hasNextLine()){
           count++;
           scan.nextLine();
    }
    

    这将在程序真正启动之前读取所有输入

    在那之后(如果程序甚至走了那么远,STDIN通常不会在控制台上关闭),scan在第二个循环中没有更多的内容可读

    此外,小写类名称与大写变量名称一样容易混淆。至少你在这里是一致的;-)

  2. # 2 楼答案

    将您的输入添加到列表中,然后您就可以继续执行逻辑了。我修改了代码如下

    import java.util.Scanner ;
    import java.util.ArrayList ;
    import java.lang.Character;
    import java.lang.String ;
    
    public class trim {
    
    public static void main (String[]args) {
        String SongName = " " ;
        String Song = " " ;          
        int count = 0 ;
    ArrayList lst = new ArrayList();
    
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()) {                  
            lst.add(scan.nextLine());
            count++;
        }
    
    for (int i=0 ; i < count ; i ++)  {                   
        SongName = (String)lst.get(i);  
        SongName = SongName.trim() ;
        SongName = SongName.replaceAll("\\s+"," ");
        if (Song== " " ) {
           Song = SongName;
        }
        else  {
           Song  = Song + "\n" +SongName ;
        }                   
        }
    System.out.println(Song) ;
      }
    }        
    
  3. # 3 楼答案

    while (scan.hasNextLine()) {
        count++;
        scan.nextLine();
    }
    

    对我来说,这似乎是一个无限循环。它只是不断地从控制台读取输入。你不停地打字,这不停地阅读