2014-02-20 16 views
0

我一直在尝试从编程站点解决问题,数据如下。我的文本文件中的内容如下所示。从文件中获取数字并添加

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] 

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

+0

您可能想要创建具有适当的输入参数,而不是主要方法的方法。然后你可以将读取的数组传递给你的算法。 ArrayLists在这里不是必需的。 –

+0

是读取解决提出的问题的值或算法的问题吗?如果它是关于算法,请张贴链接到问题,以便我们可以阅读它 – CME64

+0

嗨C @ ME64,我更新了我的问题与代码和问题的链接不可用,这是一个非常古老的问题对于我来说,所有的难题都会带给我文档。谢谢 – user2423959

回答

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(); 

做你想做什么用这个数据。

+0

嗨基于你的输入和数组列表的概念,我试过在我的答案更新的代码与我得到的错误,请看看它。 – user2423959

+1

@ user2423959'while(s.next()!= null){list.add(s.next()); }'应该只是'list.add(s.nextInt());'(ArrayList'可能应该是'Integer'的ArrayList'而不是'String')。否则,你只是继续循环,直到你用尽元素。周围的for循环负责调用'nextInt'正确的时间。还要注意,仅仅使用'nextInt'而不是'next'并将返回的'String'转换为整数会更容易。 – Dukeling

+0

嗨,我已经更新了我的答案,但仍然收到相同的错误。我只想知道,在我的文本文件中,数值由逗号分隔,如我的问题所示,这是否有所作为? – user2423959

1

你可以用Scanner.nextLine()方法做到这一点得到充分的台词:

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

之后,你必须split的数字,让他们的数组。

如果流中有另一行,也可以考虑使用Scanner.hasNextLine()方法来证明。

最后处理你对这些值的逻辑。

+0

你不用'nextLine'来做*。只需使用'next'就可以完美地工作(请参阅我的答案)。 – Dukeling

+0

真的!这是另一种可能性! ;) – bobbel

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("}"); 
    } 
} 
相关问题