【问题标题】:not storing text data into java array using scanner不使用扫描仪将文本数据存储到java数组中
【发布时间】:2015-01-13 20:15:19
【问题描述】:

我的代码只是打印出我在另一个程序中创建的列表中的最后一个数字。 我需要帮助将数据存储到数组中,以便之后对其进行排序。 编辑:我需要从“numbers.txt”文件中获取数据并将其存储到一个数组中。

public static void main(String[] args) throws Exception {
    int numberArray = 0;
    int[] list = new int[16];

    File numbers = new File("numbers.txt");
    try (Scanner getText = new Scanner(numbers)) {
        while (getText.hasNext()) {
            numberArray = getText.nextInt();
            list[0] = numberArray;
        }
        getText.close();
    }
    System.out.println(numberArray);
    int sum = 0;
    for (int i = 0; i < list.length; i++) {
        sum = sum + list[i];
    }
    System.out.println(list);
}
}

【问题讨论】:

  • 我也不应该使用arrayList
  • 在放入列表时,您必须增加列表索引。您只在list[0] 中放置物品!使用numberArray 变量。在循环内递增并将其用作列表数组索引。
  • 您还需要在 try 块之后添加 catchfinally 块。没有它,这段代码将无法编译
  • @hagbear:我不是故意让你删除你的答案,只是添加一个解释。
  • My code is just printing out the last number from the list 因为您正在打印包含上次读取编号的numberArray。而且您无需致电getText.close();try-with-resources 语句会为您做到这一点。

标签: java arrays sorting file-io


【解决方案1】:

代码中的更正。

1.) 在 while 循环内,list[0] = numberArray; 将继续在同一 index 0 上添加元素,因此 lat 值将被覆盖。所以像list[i] = numberArray; 这样的东西可以工作,increement iwhile loop 里面。在这里照顾ArrayIndexOutOfBound Exception

public static void main(String[] args) throws Exception {
    int numberArray = 0;
    int[] list = new int[16];

    File numbers = new File("numbers.txt");
    int i =0;

// Check for arrayIndexOutofBound Exception. SInce size is defined as 16

    try (Scanner getText = new Scanner(numbers)) {
        while (getText.hasNext()) {
            numberArray = getText.nextInt();
            list[i] = numberArray;
             i++;
        }
        getText.close();
    }
    System.out.println(numberArray);
    int sum = 0;
    for (int i = 0; i < list.length; i++) {
        sum = sum + list[i];
    }
    System.out.println(list);
}
}

【讨论】:

  • while (getText.hasNext()) 循环的主体可以是单行:list[i++] = numberArray = getText.nextInt(); :D.
  • @Tom 是的,我们可以在代码中进行优化,但是 OP 不是在询问优化代码,而是关于功能本身不起作用。
  • @ankur-singhal 谢谢你给我看。虽然我和你一样做了,当我打印出数组时,它只打印出我认为的内存地址。
  • @odus 是的,这条语句System.out.println(list); 会这样做,所以像上面那样迭代并打印System.out.println(list[i]);
  • @ankur-singhal 啊,我知道!谢谢!我怎样才能像你一样优秀?
猜你喜欢
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2015-08-13
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多