【问题标题】:Java: String not printedJava:未打印字符串
【发布时间】:2017-12-09 16:56:10
【问题描述】:

我正在从文件中读取一些数据,并且每一行都分配给字符串数组的一个单元格。出于某种原因,当我在读取文件后尝试打印数组时(第 8-10 行),我什么也没打印。当我在 While 循环(第 5 行)中打印该行时,我得到了正确打印的行。

    1: int count = 0;
    2: String[] s = new String[300];


    3: while(!StdIn.isEmpty()) {
    4:  s[count]=StdIn.readLine();
    5:  System.out.println(s[count]);
    6:  count++;
    7: }

    8:  for(int i=0;i<count;i++) {
    9:   System.out.println(s[i]);
   10: }

使用扫描仪的相同代码:

    Scanner in = new Scanner(System.in);

    int count = 0;
    String[] s = new String[300];


    while(in.hasNextLine()) {
        s[count]=in.nextLine();
        System.out.println(s[count]);
        count++;
    }
    for(int i=0;i<count;i++) {
        System.out.println(s[i]);
    }

我无法弄清楚我的代码有什么问题。

提前致谢。

编辑:读取最后一行后, in.hasNextLine() 不会返回任何内容。它卡在count++上。见照片->DEBUGGER

【问题讨论】:

  • 我看不出有什么问题,但不知道StdIn 是什么或做什么,我们看不到全貌。您是否尝试过调试What is a debugger and how can it help me diagnose problems?
  • @Andreas 使用扫描仪将相同的代码添加到我的问题中,如果有帮助的话。
  • 您能否在问题中包含您得到的确切输出以及您想要的输出?
  • 您说您正在从文件中读取文本,但您的编辑表明您正在从System.in 读取。两种情况有很大区别。 System.in 一直打开,直到它被显式关闭,所以hasNextLine 不能返回false,因为用户/进程可能正在写入 System.in,所以hasNextLine 需要等待 i> 用于数据,因此您仍处于第一个循环中。如果文件之后它将读取最后一行 hasNextLine 可以返回 false 并继续到负责打印数组内容的下一个循环。
  • 如果您真的是在阅读文件,请正确发布minimal reproducible example,否则我们无法帮助您。

标签: java arrays string printing


【解决方案1】:

这仅适用于文件,但在此处使用System.in 时,in.hasNextLine() 永远不会给出错误。您需要为它提供一个条件来中断 while 循环。

【讨论】:

  • Ctrl+Z 将结束输入,导致hasNextLine() 返回false。
【解决方案2】:
8:  for(int i=0;i<count;i++) {

这是你的错误,这应该是 s.length 而不是 count

【讨论】:

  • 不是真的,count会和s.length()一样存储
  • 我使用 count 是因为可能不会使用所有 300 个索引
  • 是的,这是正确的方法。但是 Juan Pablo 的建议可能会导致异常。
  • @CoffeehouseCoder counts.length 不同,因为s.length 是300,count 是实际读取的行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多