3 Replies Latest reply: Feb 19, 2013 11:31 AM by 991827 RSS

    frequency of numbers in txt file

    991827
      hi,

      iam a newbie in java,just started learning it.

      i have numbers (only from 1 to 5) input typically at run time the input breaks only if i enter -1. , these will be saved to a txt file,numbers.txt. now my problem is to count the frequency of numbers enterted in the txt file and ouput the result to another txt file(output.txt), i know the logic , but not completely sure how to implement it .

      import java.io.File;
      import java.util.Formatter;
      import java.util.Scanner;
      public class StudentPoll{

      private Scanner x;
      int[] frequency = new int[5];
      int count =0;
      public void openFile(){
      try{
      x = new Scanner(new File("numbers.txt"));
      }
      catch(Exception e){
      System.out.printf("No File found");
      }
      }
      public void readFile(){
      while(x.hasNext()){
      int a= x.nextInt();
      switch(a){
      case 1:
      ++frequency[0];

      case 2:
      ++frequency[1];

      case 3:
      ++frequency[2];

      case 4:
      ++frequency[3];

      case 5:
      ++frequency [4];

      }

      for(int rating =1; rating<=frequency.length;rating++){
      System.out.printf("%s%10s\n","rating","Frequency");
      System.out.printf("%6d%10d\n",rating,frequency[rating]);



      }
      }
      }


      public void closeFile(){
      x.close();
      }


      and in the main method
      StudentPoll read = new StudentPoll();
      read.openFile();
      read.readFile();
      read.closeFile();


      also, here i was just trying to get the output right on the console first, i don't how to write it to the txt file (output.txt)
      and when i run this always the Frequency counter remains 1.

      o/p when i run

      run:
      Enter integer result (1 - 5), -1 to quit: 1
      Enter integer result (1 - 5), -1 to quit: 2
      Enter integer result (1 - 5), -1 to quit: 1
      Enter integer result (1 - 5), -1 to quit: 2
      Enter integer result (1 - 5), -1 to quit: 3
      Enter integer result (1 - 5), -1 to quit: 4
      Enter integer result (1 - 5), -1 to quit: -1
      rating Frequency
      1 1
      rating Frequency
      2 1
      rating Frequency
      3 1
      rating Frequency
      4 1
      rating Frequency
      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
           at StudentPoll.readFile(StudentPoll.java:49)
           at CreateResults.main(CreateResults.java:84)
      Java Result: 1
      BUILD SUCCESSFUL (total time: 10 seconds)

      Kindly somebody please help and guide me what was i doing wrong.

      Edited by: 988824 on Feb 18, 2013 10:18 PM
        • 1. Re: frequency of numbers in txt file
          Tolls
          It would have helped if you'd pointed out the line the exception was thrown from, and used code tags.

          Anyway:
          for(int rating =1; rating<=frequency.length;rating++) {
          ...
             System.out.printf("%6d%10d\n",rating,frequency[rating]);
          ...
          Java arrays are zero based.
          In the above 'rating' runs from 1 to the length of the 'frequency' array.
          You modify the Scanner input (in a slightly odd way) earlier in the method, so I would have thought you'd know this.
          • 2. Re: frequency of numbers in txt file
            EJP
            You also need to do something about terminating your loop when -1 is entered.
            • 3. Re: frequency of numbers in txt file
              991827
              here i have modified the code, but still getting the error in the count


              import java.io.File;
              import java.util.Formatter;
              import java.util.Scanner;
              public class StudentPoll_dasariHaritha {

              private Scanner x;
              int[] frequency = new int[5];
              int count =0;
              public void openFile(){
              try{
              x = new Scanner(new File("numbers.txt"));
              }
              catch(Exception e){
              System.out.printf("No File found");
              }
              }
              public void readFile(){
              while(x.hasNext()){
              int a= x.nextInt();
              if(a==1){
              frequency[0]=0;
              ++frequency[0];
              break;
              }
              else if (a== 2){
              frequency[1]=0;
              ++frequency[1];
              break;
              }
              else if( a==3){
              frequency[2]=0;
              ++frequency[2];
              break;
              }
              else if (a==4){
              frequency[3]=0;
              ++frequency[3];
              break;
              }
              else if (a== 5){
              frequency[4]=0;
              ++frequency [4];
              break;

              }

              }


              System.out.printf("%s%10s\n","Rating","Frequency");
              System.out.printf("%s%10s\n","1",++frequency[0]);
              System.out.printf("%s%10s\n","2",++frequency[1]);
              System.out.printf("%s%10s\n","3",++frequency[2]);
              System.out.printf("%s%10s\n","4",++frequency[3]);
              System.out.printf("%s%10s\n","5",++frequency[4]);



              //}
              }


              public void closeFile(){
              x.close();
              }


              in the main method iam calling these methods
              StudentPoll_dasariHaritha read = new StudentPoll_dasariHaritha();
              read.openFile();
              read.readFile();
              read.closeFile();

              i think in the while loop iam making a mistake. can someone help me in rectifying it.