我一直在尝试从编程站点解决问题,数据如下。 我的文本文件中的内容如下。
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 :(得分: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("}");
}
}