2013-03-22 4 views
0

while 루프에서 찾기 어려움. 나는 가장 작은 숫자와 가장 큰 숫자뿐만 아니라 합을 결정할 수 있도록 생성 된 파일에서 각 숫자를 호출하거나 읽는 방법을 잘 모릅니다. 또한 가능한 경우 누군가가 코드 작성법을 설명하여 숫자가 연속적이면 몇 번이나 계산되는지 설명 할 수 있습니다. 이 파일에서 읽을 당신이 BufferedReader, Scanner, FileReader 또는을로이 중 하나를 사용하기 위해서는 0 사이 4990부터 1000까지의 500 개의 난수를 저장하는 파일입니다.이 숫자를 파일에 기록한 다음 파일을 열고 하나씩 숫자를 읽습니다.

위의 무엇을

PrintWriter prw = new PrintWriter("results.txt"); 
int num, largest, smallest, total = 0, count = 0; 
int programnumber = 6; 
    double average = 0; 

PrintWriter prw1= new PrintWriter(new FileWriter("randomdata.txt")); 
Random generator = new Random(); 
for (int i = 0; i < 1001; i++){  
     num = generator.nextInt(500);  //Will this generate a file w/ 500 num? 
     prw1.write(num + "\n"); 
    } 
    prw1.close(); 

    largest = 0;   
    smallest = 9999;   
    while (prw1.nextInt()){   //what call statement do I use? 
      num = (prw1.nextInt()); //unsure how to begin reading numbers 
      if (num > largest){ 
       largest = num; 
      } 
      if (num < smallest){ 
       smallest = num; 
      } 
    total += num; 
    count++; 
     } 
    average = (total/total); 
+0

programNumber, randomData.txt 등 변수에 낙타의 경우를 사용해야합니다 ... –

+0

또한 루프는 물음표와 함께 500 자까지만이 아니라 1001 개의 숫자를 추가합니다. Java가 0 기반임을 기억하십시오.그래서 <1000은 0-999 또는 1000 숫자입니다.) –

+0

고맙습니다. 나는 특히 파일을 생성하고 파일을 호출하거나/while 루프를 사용하여 파일의 각 번호를 개별적으로 읽고 최대 및 최소를 결정하는 데 어려움을 겪고있다. –

답변

1
num = generator.nextInt(500);  //Will this generate a file w/ 500 num? 

는 임의의 값을 생성하는 것입니다 다른 독자와 PrintWriter을 사용하지 않기 때문에 쓰기가 아닌 읽는 데 사용됩니다.

이렇게해볼 수 있습니다. 먼저 리더의 생성 :

Scanner scr = new Scanner(fileToRead); //fileToRead should be the file you wrote 

그런 다음 다음을 대체 :이와

while (prw1.nextInt()){   //what call statement do I use? 
    num = (prw1.nextInt()); //unsure how to begin reading numbers 
    // ... 
} 

을 :

while(scr.hasNextLine()){ 
    num = Integer.parseInt(scr.nextLine()); 
    // ... 
} 
1

나는 nextInt 당신이 그것을하지 생각하지 생각하지 않습니다. 당신은 쓰기 :

num = generator.nextInt(500); //Will this generate a file w/ 500 num? 

그 질문에 대한 대답은 없는입니다. the Random documentation에 따르면

public int nextInt(int n) 

는 의사 랜덤 0 (포함) 사이에 균일하게 분산 int 값이 난수 생성기 시퀀스에서 그려 지정한 값 (단독)를 반환.

따라서 nextInt(500)은 0과 499 사이의 숫자를 생성합니다.

대신에 nextInt(1000 + 1)을 사용하여 0에서 1000 사이의 숫자를 가져와야합니다.

또한 독서 코드를 변경해야합니다. 할 수없는 출력 스트림에서 읽으려고합니다. 당신은 스캐너와 함께 작동하는 코드를 변경할 수 있지만, 개인적으로 BufferedReader 사용한다 : 대신 ScannerBufferedReader 그것은 서로 다른 데이터 형식으로 확장 점이다 사용

try { 
    BufferedReader br = new BufferedReader(new FileReader("randomdata.txt")); 
    String line = br.readLine(); 
    while (line != null) { 
     // Do something, e.g. Integer.parseInt(line); 
     line = br.readLine(); 
    } 
    br.close(); 
} catch (IOException ie) { 
    ie.printStackTrace(); 
} 

이유 중 하나입니다. 아마도 라인의 각 숫자 앞에 접두사가 있거나 라인에 두 개의 숫자가있을 수 있습니다. BufferedReader을 사용하여 전체 행을 가져온 다음 구문 분석하기 전에 문자열의 서식을 지정할 수 있습니다. Scanner으로 nextInt"Number: 6"으로 호출하면 제대로 작동하지 않습니다.

+0

1. while 루프는 null이 아니므로 절대로 종료되지 않습니다. 2. int에 파일을 저장하는 동안 약간의 공간을 제공해야합니다. 3. 파일을 읽기위한 스캐너 클래스가이 상황에 더 적합합니다. – Smit

+0

@Smit : 의견에 감사드립니다. 'nextLine'의 결과를 지정하는 것을 잊었습니다. 'int'를 파일에 저장하는 공간을 제공한다는 것은 무엇을 의미합니까? 나는 본보기로 글을 쓰지 않고있다. 또한 일반적으로'Scanner' 대신'BufferedReader'를 사용합니다; 왜 스캐너가이 상황에 더 잘 맞을지 설명 할 수 있습니까? – wchargin

+0

파일을 저장하는 동안 일부 구분 기호를 제공해야합니다. 다른 방법으로는 모든 것이 병합됩니다. 스캐너는 스캐너 클래스가'hasNextInt()'와'nextInt()'메소드를 가지고 있기 때문에 파싱을 피할 수 있습니다. – Smit