2016-11-01 3 views
-1
public class ArrayReversal { 
    public static void main(String[] args) { 
     double[] numbers = readInputs(5); 
     printReversed(numbers); 
    } 

    public static double[] readInputs(int numberOfInputs) { 
     System.out.println("Enter " + numberOfInputs + "numbers: "); 
     Scanner in = new Scanner(System.in); 
     double[] inputs = new double[numberOfInputs]; 
     for (int i = 0; i < inputs.length; i++) { 
      inputs[i] = in.nextDouble(); 
     } 
     return inputs; 
    } 

    public static void printReversed(double[] values) { 
     for(int i = values.length - 1; i>= 0; i--) { 
      System.out.print(values[i] + " "); 
     } 
    } 
    //in.close(); 
} 

У меня есть комментарий close(), потому что это давало мне синтаксическую ошибку, предполагающую, что ожидается идентификатор. Поэтому я не уверен, куда его поместить.Я получаю утечку ресурса: «in» никогда не закрывается.

+1

Включить языковой тег. – LarsTech

+4

Попробуйте переместить 'in.close()' в метод 'readInputs', где определяется' in'. Поместите его непосредственно перед оператором 'return'. –

+0

В этом конкретном случае (когда 'System.in' используется как входящий поток) вам это действительно не нужно. –

ответ

2

'в' никогда не будет закрыто предупреждение

Так закройте его.

public static double[] readInputs(int numberOfInputs) { 
     System.out.println("Enter " + numberOfInputs + "numbers: "); 
     Scanner in = new Scanner(System.in); 
     double[] inputs = new double[numberOfInputs]; 
     for (int i = 0; i < inputs.length; i++) { 
      inputs[i] = in.nextDouble(); 
     } 
     //be aware: you are globally closing System.in 
     in.close(); 
     return inputs; 
    } 
+1

Имейте в виду, что это закроет 'System.in', что прекрасно, если вы никогда не будете читать от System.in' снова в приложении. – CollinD

+0

правильно ... я обновлю ответ – FMiscia