Как извлечь массив из файла, отсортировать его и отобразить вывод в одном файле - PullRequest
0 голосов
/ 28 апреля 2020

Я взял массив ввода из файла "File.txt" (в котором в качестве размера массива указан первый ввод (4), а следующие - числа, которые мне нужно отсортировать), и отсортировал массив, но теперь я хочу распечатать отсортированный массив a [i] в ​​том же файле "File.txt"

До сих пор я делал это .... когда я запускаю его в консоли, принимая массив ввода из файла "File.txt "он работает правильно, но когда я хочу отобразить выходные данные в том же файле, он говорит ... исключение массива за пределами границ Как я могу это сделать ??

    Scanner sc = new Scanner(f1);
    int [] a = new int[sc.nextInt()];

    int i;
    int j;
    for(i=0;i<a.length;i++)
    {
        a[i] = sc.nextInt();
    }

    int temp=0;
    for(i=0;i<a.length;i++)
    {
     for(j=0;j<a.length-1;j++)
     {
       if(a[j]>a[j+1])
       {
         temp=a[j];
         a[j]=a[j+1];
         a[j+1]=temp;
       }
     }
    }
    FileWriter fw = null;
    BufferedWriter bw = null;
    PrintWriter pw = null;

     try
      {

        fw = new FileWriter(f1,true);  
        bw = new BufferedWriter(fw);            
        pw = new PrintWriter(bw);

        pw.println(a[i]);


      }
     catch(Exception e)
      {
        e.printStackTrace();
      }
      finally
      {
          try
          {
           fw.close();
           bw.close();
           pw.close();
          }
          catch(Exception e)
          {
              e.printStackTrace();
          }

      }

}

}

1 Ответ

0 голосов
/ 28 апреля 2020

Проблема с вашим кодом в том, что вы печатаете a[i]. Вы используете следующий код:

for(i=0;i<a.length;i++)

После этого l oop, i равно a.length. Затем в другой строке вы вызываете

pw.println(a[i]);

для вывода в файл. Но теперь i относится к элементу, выходящему за пределы массива. Вы должны вывести его, повторяя так:

  BufferedWriter bw = null;
  bw = new BufferedWriter(new FileWriter(f1));
  for (int i = 0; i < a.length; i++) {
    bw.write(Integer.toString(a[i]);
    bw.newLine();
  }
  bw.flush();  
  bw.close(); 
...