2014-02-20 3 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'는'String'보다는'Integer'의'ArrayList'이어야합니다). 그렇지 않으면 요소가 부족할 때까지 루핑을 계속합니다. 주변의 for-loop는'nextInt'에 정확한 시간을 요구합니다. 또한'next'와는 반대로'nextInt'를 사용하고 리턴 된'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 코드가 컴파일 오류를 생성합니다.() 구문 분석해야하는 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("}"); 
    } 
} 
관련 문제