【问题标题】:Java not outputting to terminal as expected (new lines appearing)Java 未按预期输出到终端(出现新行)
【发布时间】:2012-09-24 06:31:22
【问题描述】:

我的代码如下。我希望它会吐出类似的东西:

SN=12345678 EX= 73 CW= 73 标记 = 73.0

SN=87654321 EX= 50 CW= 70 标记 = 60.0

但我得到了:

.

.

.

SN=12345678 EX= 73 CW= 73 标记 = 73.0

.

.

SN=87654321 EX= 50 CW= 70 标记 = 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?它是如何定义的?
  • 问题可能出在 getInt 方法或(不太可能)在另一个线程中。
  • 谢谢,我不想这样做,我只是想知道是否有人可以从我的代码中发现为什么显示这些换行符。这就是我拥有的所有代码。 CIO 是一个导入类,允许从控制台输入。

标签: java bluej


【解决方案1】:

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

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

编辑:当您确认 CIO 与控制台交互时,这一点现在很清楚了。当您调用 getInt 时,您最终会解析输入 except 以获取换行符。由于控制台被定义为回显它所获得的每一次击键,因此必须在某处输出换行符(既用作输入分隔符 换行符/换行符)......这正是为什么会在输出中看到换行符。

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

【讨论】:

  • 这对我来说就像大学代码。他认为问题出在他打印的部分,但由于他在上大学,所以他不知道;他“知道”错误可能来自哪里,并希望我们发现它。您无法解释额外换行符的现象,因为他没有运行他发布的同一段代码。
  • 这是否是大学代码并不重要。我们不能期望人们总是能够提供完整的上下文信息:有时他们无法访问它,有时(如您所建议的)他们甚至没有意识到它。因此,我们能做的最好的事情就是假设并要求提供更多信息。即使这是你建议的“大学代码”,这也是我们可以帮助这个人学习的唯一方法。
  • 是的,这是大学代码。第 1 周 Java。我不想要答案,我希望有人能指出我应该寻找问题的方向。 CIO 课程是我的大学为我们制作的课程,用于输入等。我已将 getInt 的定义编辑到我的 OP 中。
  • 所以CIO 确实与控制台交互...我将编辑我的答案。
【解决方案2】:

您发布的代码根本不会产生任何新行(即使是在不同的值集之间)。你是如何运行代码的?您确定您发布的代码与正在执行的代码相同吗?

还有几点:

  • 您不需要将sNexMarkcwMark 转换为整数,它们已经被声明为整数。
  • 您应该将Mark 变量的名称更改为mark - 以大写字母开头的名称通常仅用于类和接口。

【讨论】:

  • 请使用“添加评论”按钮。
  • 同意,这不是一个真正的答案,但仍然不需要投票,因为很明显输出不是来自发布的代码。
  • 是的,这绝对是我发布的代码的输出。如果我将最后一行更改为 println,我会得到第三个换行符。
  • 这是 stin - 这是在创建一个新行。大学评分系统在检查时会忽略“#”,因此我将其中一个打印到 getInt 请求行上。我现在已经通过了这个课程!
【解决方案3】:

不确定 CIO 是什么(一些标准输入?),但它是负责任的:

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

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2015-02-27
    • 2013-10-27
    相关资源
    最近更新 更多