我一直在尝试整天锻炼这个excersise,但没有任何运气。预先感谢您的帮助。Java读取.txt文件到数组
这里的问题
你要实现的方法是将每个整数存储在数字阵列 ,每个数组元素一个数字。我们将使用长度为50的数组 ,所以我们将能够存储多达50个数字的整数 长。我们必须小心如何存储这些数字。例如,考虑 ,例如存储数字38423和27.如果我们在 处存储这些数组的“前面”,并且该数组的索引0中的每个数字的前导数字,那么当我们将这些数字相加时, 我们可能会添加它们是这样的:
为了模拟值的这种向右移位,我们将每个值存储为 的整整50位的序列,但我们将允许号码有 前导0。例如,上面的问题转化为:
现在列正确对齐,我们有足够的空间在 前的情况下,我们甚至更长的号码添加到这些。
程序的数据将被存储在一个名为sum.txt的文件中。 对于您要解决的问题,输入文件的每一行都会有不同的添加问题。每行将有一个或多个整数加起来 。在这篇文章末尾看看输入文件 和你应该产生的输出。请注意,您为每条输入行生成一行 输出行,显示您在 正在解决的添加问题及其答案。您的输出还应该在 末端指示处理了多少行输入。您必须完全重现 此输出。
您应该使用第6章中描述的技术来打开一个文件, 逐行读取它,并处理每行的内容。在读取这些数字的 中,您将无法将它们读取为整数或长整数 ,因为它们中的很多都太大而无法以int或long存储。所以 你必须使用方法 next()调用字符串值来读取它们。那么你的第一个任务就是将一串数字 转换成一个50位数的数组。如上所述,您需要将 号码向右移动,并在前面加上前导0。字符串 方法charAt和方法Character.getNumericValue将有助于 解决这部分问题。
您将要添加每行数字,这意味着您将有 编写一些代码,允许您将这两个 数字相加或将其中一个添加到另一个。这是你在小学所学的东西,从右边开始加上,保持 跟踪是否有一个数字从一列到 。您的挑战在于采取一个您熟悉的过程 ,并编写执行相应任务的代码。
你的程序也必须写出这些数字。这样做,它应该 不打印任何前导0。尽管 号码在内部以前导0存储是方便的,但读取输出的人将会看到 而不是任何前导0。
您可以假设输入文件的数字有50个或更少的 数字,答案总是50位或更少。但是,请注意,您必须处理个人可能为0或答案可能为0的可能性。输入文件中不会有负数 整数。
你应该使用长度恰好为50位数字的数组来解决这个问题 长。某些错误可以通过将数组拉伸到像51位数字那样的 来解决,但不应该这样做,如果数组需要超过50位数字,则 会丢失样式点。
的50位数的选择是任意的(一个神奇的 数),所以你应该引入一个类常量您使用 贯穿,将可以很容易地修改代码以 不同数量的操作数字。
将输入文件看作是您的程序必须解决的问题类型的示例。我们可能会使用更复杂的输入文件来进行实际的 分级。
Java类库包含名为BigInteger的类和使用类似于我们要求在此程序中实现的 的策略的BigDecimal。您无权使用BigInteger或BigDecimal解决此问题 。您必须使用数字 数组解决它。
您的程序应该存储在名为Sum.java的文件中。
输入文件sum.txt
82384
204 435
22 31 12
999 483
28350 28345 39823 95689 234856 3482 55328 934803
7849323789 22398496 8940 32489 859320
729348690234239 542890432323 534322343298
3948692348692348693486235 5834938349234856234863423
999999999999999999999999 432432 58903 34
82934 49802390432 8554389 4789432789 0 48372934287
0
0 0 0
7482343 0 4879023 0 8943242
3333333333 4723 3333333333 6642 3333333333
输出应该产生
82384 = 82384
204 + 435 = 639
22 + 31 + 12 = 65
999 + 483 = 1482
28350 + 28345 + 39823 + 95689 + 234856 + 3482 + 55328 + 934803 = 1420676
7849323789 + 22398496 + 8940 + 32489 + 859320 = 7872623034
729348690234239 + 542890432323 + 534322343298 = 730425903009860
3948692348692348693486235 + 5834938349234856234863423 = 9783630697927204928349658
999999999999999999999999 + 432432 + 58903 + 34 = 1000000000000000000491368
82934 + 49802390432 + 8554389 + 4789432789 + 0 + 48372934287 = 102973394831
0 = 0
0 + 0 + 0 = 0
7482343 + 0 + 4879023 + 0 + 8943242 = 21304608
3333333333 + 4723 + 3333333333 + 6642 + 3333333333 = 10000011364
总线= 14
我的代码迄今
public class Sum {
public static void main(String args[]) throws FileNotFoundException{
File file = new File("sum.txt");
Scanner scanner = new Scanner(file);
String[] myInts = new String[50];
int mySpot = 0;
while(scanner.hasNext()){
myInts[mySpot] = scanner.next();
mySpot++;
}
for(int i = 0; i < myInts.length; i++){
}
System.out.println(Character.getNumericValue(myInts[0]));
System.out.println(Arrays.toString(myInts));
}
}
你需要压缩你的问题。人们会在没有阅读任何信息的情况下downvote – Sajidkhan 2014-11-21 01:26:42
所有这些对于任务来说都很重要。 – SquidSquad 2014-11-21 01:28:06
你的程序是否按照你期望的那样做?程序运行时你认为应该发生什么?究竟发生了什么?你为什么这么认为?从这个分析开始,然后让你的问题更加精确。这样,没有人为你工作就更容易得到答案。我建议你将问题分解为一些非常简单的问题,例如逐行读入文本文件。首先解决。 – 2014-11-21 01:28:50