Java没有按预期输出到终端(出现新行)

  • 本文关键字:终端 新行 输出 Java java bluej
  • 更新时间 :
  • 英文 :


我的代码如下。我希望它能吐出这样的东西:

SN=12345678 EX=73 CW=73 Mark=73.0

SN=87654321 EX=50 CW=70 Mark=60.0

但我得到了:

SN=12345678 EX=73 CW=73 Mark=73.0

SN=87654321 EX=50 CW=70 Mark=60.0

(有大量额外的换行符(以句点表示))

我真的不知道这些是从哪里来的。

请给我指正确的方向!

class Main
{
public static void main( String args[] )
{ 
int sN = 1;
int cwMark;
int exMark;
double Mark;
while ( sN != 0 )
{
sN = CIO.getInt();
cwMark = CIO.getInt();
exMark = CIO.getInt();
Mark = ((double)(exMark + cwMark)/2);
System.out.print("SN=");
System.out.print( (int) sN );
System.out.print(" EX=  ");
System.out.print( (int) exMark );
System.out.print(" CW=  ");
System.out.print( (int) cwMark );
System.out.print(" Mark =  ");
System.out.print(Mark);
}
}
}

getInt定义为:

public static int getInt()
{
String res = getLine();                          
int value = 0;                                 
try
{
value = Integer.parseInt( res.trim() );
}
catch ( NumberFormatException ex ) 
{                                                 
}
return value;                                   
}

我不确定CIO是什么。您从哪里获得输入?我可以推断你是从控制台获取整数的,这可以解释你所看到的:你从控制台获取输入,并打印到同一个控制台。要输入一个整数,必须有人在某个地方点击一条换行符,并且该换行符将被回显到控制台。

我可能在抽烟,但我认为这与CIO的定义有关。

EDIT:当您确认首席信息官与控制台交互时,这一点现在很清楚了。当您调用getInt时,除了换行符的之外,您最终会解析输入。由于控制台被定义为回显它得到的每一次击键,换行符(既是输入分隔符,也是换行符/换行符)必须输出到某个地方。。。这正是您在输出中看到换行符的原因。

例如,如果您在某个地方添加另一个getInt,您将在输出中看到4个换行符,而不是3个。

您发布的代码根本不会产生任何新行(甚至不会在单独的值集之间产生)。你是如何运行代码的?你确定你发布的代码是正在执行的同一版本吗?

此外,还有几点:

  • 您不需要将sNexMarkcwMark强制转换为int,它们已经声明为int
  • 您应该将Mark变量的名称更改为mark——以大写字母开头的名称通常只用于类和接口

不确定CIO是什么(一些stdin?),但它是可响应的:

sN = CIO.getInt();
cwMark = CIO.getInt();
exMark = CIO.getInt();

最新更新