从文件中获取数字并添加

时间:2014-02-20 13:49:10

标签: java arrays arraylist

我一直在尝试从编程站点解决问题,数据如下。  我的文本文件中的内容如下。

2
100
3
5 75 25
200
7
150 24 79 50 88 345 3

第一个数字给出了测试用例的数量,这里是2,并且它之后的数字是总和,下一行是数组的大小,后跟数组元素(数字)。我需要将数组数相加并与给定的总和匹配,并打印与总和匹配的数字的位置。

在上述情况下,结果应为:

2, 3
1, 4
4, 5
29, 46
11, 56
4, 5
40, 46
16, 35
55, 74
7, 9

我设法手动获取此功能,但无法从文本文件中弄清楚如何执行此操作。

我用来获取值的代码:

public class StoreCredit {
    public static void main(String[] args) {
        int Avail=200;
        int[] pri={150, 24, 79, 50, 88, 345, 3};

        for(int i=0;i<pri.length-1;i++){
            for(int j=i+1; j<=pri.length-1;j++){
                int sum=pri[i]+pri[j];
                //System.out.println(pri[i]+", "+pri[j]+" is "+sum);
                if(sum==Avail){
                    System.out.println((i+1)+", "+(j+1));
                }
            }
        }
    }
}

我用来从文本文件中获取值的代码:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class FromFile {
    public static void main(String args[]) throws Exception {
        Scanner s = new Scanner(new File("D:/A1.txt"));
        ArrayList<String> list = new ArrayList<String>();
        while (s.hasNext()){
            list.add(s.next());
        }
        System.out.print(list);
        s.close();
    }
}

当我运行上面的代码时,我得到了以下输出。

[2, 100, 3, 5, 75, 25, 200, 7, 150, 24, 79, 50, 88, 345, 3]

如何从文件中读取数据(总和,数组大小的输入数量等)?

3 个答案:

答案 0 :(得分:1)

您可以使用Scanner.nextLine()方法来获取实线:

["2", "100", "3", "5 75 25", "200", "7", "150 24 79 50 88 345 3"]

之后你必须split数字来获得它们的数组。

如果流中还有另一行,也可以考虑使用Scanner.hasNextLine()方法进行校对。

最后处理这些值的逻辑。

答案 1 :(得分:1)

阅读测试用例计数。

int testCaseCount = scanner.nextInt();

循环测试用例的数量。

for (int i = 0; i < testCaseCount; i++)

阅读总和。

   int sum = scanner.nextInt();

读取数组大小并构造数组。

   int arraySize = scanner.nextInt();
   int[] array = new int[arraySize];

循环遍历数组,填充它。

   for (int j = 0; j < array.length; j++)
      array[j] = scanner.nextInt();

执行您想要对此数据执行的操作。

答案 2 :(得分:1)

扫描仪还有一个适用于此目的的nextInt。这将始终跳转到下一个整数并解析它。我相信Dukelings代码会生成编译错误,因为next()返回一个你必须解析的String。这应该有效:

import java.util.*;
import java.io.*;
public class read{
    public static void main(String[] args) {
        Scanner s = null;
        try{
            s = new Scanner(new File("test"));
        }catch(IOException e) {
            e.printStackTrace();
            System.exit(1);
        }
        int testCases = s.nextInt();
        for(int testCase=0; testCase<testCases; testCase++){
            int sum = s.nextInt();
            int numberOfCanidates = s.nextInt();
            List<Integer> canidates = new ArrayList<Integer>();
            for(int number = 0; number<numberOfCanidates ;number++){
                canidates.add(s.nextInt());
            }
            solve(sum, canidates);
        }
    }

    public static void solve(int sum, List<Integer> canidates) {
        System.out.print("Trying to solve problem for sum=" + sum + " and candiates { ");
        for(Integer canidate : canidates){
            System.out.print(canidate);
            System.out.print(" ");
        }
        System.out.println("}");
    }
}