【发布时间】:2018-11-27 20:29:32
【问题描述】:
我正在尝试从文本文件中填充一个二维数组(它只是 pi 到小数点后 900 位,除了 3.14 之外没有空格或其他任何东西......)现在它将打印我所在的行和列索引,连同一个计数器(最终将被移除)。
import java.util.Scanner;
public class Array {
public static void main(String[] args) throws Exception {
// instantiate input file
java.io.File file = new java.io.File("C:\\arrayinput.txt");
// instantiate scanner to read file
Scanner scanner = new Scanner(file);
// instantiate array
String[][] array = new String[20][45];
// instantiate counter
int i = 1;
// loop to read file and assign a character to each array element
for (int rows = 0; rows < array.length; rows++) {
for (int columns = 0; columns < array[rows].length; columns++) {
System.out.println("Row: " + rows + ", column: " + columns + ", counter = " + i);
i++;
array[rows][columns] = scanner.next();
} // end inner for loop
} // end outer for loop
scanner.close();
}// end main method
}
这段代码会循环两次并显示:
行:0,列:0,计数器 = 1
行:0,列:1,计数器 = 2
线程“主”java.util.NoSuchElementException 中的异常
at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at Array.main(Array.java:30)
我不明白为什么在没有运行代码时会出现此异常
array[rows][columns] = scanner.next();
它会像我预期的那样循环遍历 0-19 行和 0-39 列,并且计数器将一直迭代到 900(因为文本文件是 pi 到第 900 位)。但是,当它开始将文本文件中的每个字符分配给每个元素时,当我到达第 0 行第 2 列时会抛出错误,我不知道为什么。 我的 arrayinput.txt 文件的内容:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473 P>
【问题讨论】:
-
你的输入文件是什么样的?
-
只是出于好奇,你为什么要把它分成这么多的字符串?您可以将其存储在一个字符串中,甚至更好:存储在 BigDecimal 中(这样您也可以使用它进行算术运算)
-
这是我的“Java 简介”课程@Gtomika 的作业。我只是用 pi 得到一个大字符串,想法是按行主要顺序存储字符(填充第 0 行,然后第 1 行等),然后按列主要顺序提取并打印它们(显示第 0 列,第 1 列等)。
-
您的文本是单个字符串。所以你只能得到 1 个元素
-
@MdJohirulIslam 是对的。当第二次读取它为空/EOF 时,您只会得到 1 个字符串。你想要“。”成为第二个字符还是你只想要数字?如果你想要点。使用
scanner.useDelimiter("");这会将字符串分解为字符
标签: java arrays for-loop java.util.scanner nosuchelementexception