2015-12-09 5 views
-1

Я недавно изучал Java и решил как небольшую задачу понять пользовательский ввод, я бы создал генератор таблиц времен для введенного пользователем номера. Вот код:'in не может быть разрешен' Java Scanner

import java.util.Scanner; 

public class Tables { 

public static void main(String[] args) { 

    int IFactor, num, ans; 

    Scanner Input = new Scanner(System.in); 
    try { 
     System.out.println("Please enter a number to be the factor: "); 
     String SFactor = Input.next(); 
     IFactor = Integer.parseInt(SFactor); 

     num = 1; 

     while (num < 11) { 
      ans = num * IFactor; 
      System.out.println(num + " * " + IFactor + " = " + ans); 
      num++; 
     } 

    } 
    finally { 
     in.close(); 
    } 

} 

} 

Я изначально была ошибка, когда я объявлял «ввод» сканер с Eclipse, о том, что произошла утечка ресурсов и что она не была закрыта. Я сделал несколько исследований и увидел, что вставка try {} и finally {} с 'in.close();' решит проблему. Однако это было не так, поскольку у меня теперь есть ошибка: «in can not resolved».

Любая помощь была бы высоко оценена! Благодаря!

+0

Какое исключение или ошибка вы получаете. У нас есть журналы. – Ajit

+1

'in' не объявлен вами. Свойство 'System' класса' InputStream' типа – Rehman

+0

Стоит упомянуть, что в Java вы, как правило, не кэшируете переменные. Вы капитализируете типы. Итак, вы смотрите на 'int factor',' Scanner input', 'String factorString' и т. Д. – corsiKa

ответ

1

Ваше имя переменной Input и вы пытаетесь сделать in.close(). Оно должно быть:

finally { 
    Input.close(); 
} 
2

in не привязан ни к чему. Вам нужно закрыть свой сканер под названием «Ввод».

try{ 
// code 
} 
catch(Exception ex) 
{ 
// Exception handling 
} 
finally{ 
     if(Input!=null){ 
     Input.close(); 
     } 
} 
0

Попробуйте

finally { 
    Input.close(); 
} 

вместо этого. Обратите внимание, что с java имена переменных начинаются с букв в нижнем регистре в целом (и Classes with the upperface) - так что было бы лучше переименовать эту переменную в `input? также.

1

попробуйте с ресурсами современный/рекомендуемый способ закрыть AutoCloseable ресурсов, таких как Scanner. Например.

try (Scanner Input = new Scanner(System.in)) { 
    // do stuff with Input 
} 

и пропустить finally блок. Input будет закрыт, если в конце блока try или ранее, если выдается исключение. И вам не нужно беспокоиться об этом.

Check Пункт 7 в Effective Java по причинам, чтобы избежать finally Заблокировать

0

Проблема заключается в том

finally { 
    in.close(); 
} 

Вы можете попробовать этот код, который использует примерочных с-ресурсами. Это больше java8, и вам не нужен пункт finally:

try(Scanner Input = new Scanner(System.in);) 
    { 
     System.out.println("Please enter a number to be the factor: "); 
     String SFactor = Input.next(); 
     IFactor = Integer.parseInt(SFactor); 

     num = 1; 

     while (num < 11) { 
      ans = num * IFactor; 
      System.out.println(num + " * " + IFactor + " = " + ans); 
      num++; 
     } 

    }