Наверное, я очень опаздываю на вечеринку.
Как уже говорилось ранее, вызов input.nextLine()
после получения вашего значения int решит вашу проблему. Причина, по которой ваш код не работал, заключается в том, что с вашего ввода (куда вы ввели int) ничего не оставалось хранить в string1
.
Рассмотрим nextLine () как нечетный среди методов nextFoo () в классе Scanner. Давайте возьмем быстрый пример. Скажем, у нас есть две строки кода, подобные приведенным ниже:
int firstNumber = input.nextInt();
int secondNumber = input.nextInt();
Если мы вводим значение ниже (как одну строку ввода)
54 234
blockquote>Значение нашей переменной
firstNumber
иsecondNumber
становится 54 и 234 соответственно. Причина, по которой это работает, заключается в том, что новый канал ( i.e\n ) НЕ НЕ автоматически генерируется, когда метод nextInt () принимает значения. Он просто берет «следующий int» и движется дальше. Это то же самое для остальных методов nextFoo (), за исключением nextLine ().nextLine () генерирует новый фид строки сразу после принятия значения; это то, что означает @RohitJain, говоря, что новый канал «потребляется».
Наконец, метод next () просто берет ближайшую строку без создания новой строки; это делает это предпочтительным методом для взятия отдельных строк в одной и той же строке.
Надеюсь, это поможет ... Веселая кодировка!
Из того, что я могу сказать в документах, вы не можете сделать это в командной строке.
Согласно документации javac
, -Xlint: none только отключает предупреждения, «не предусмотренные спецификацией Java Language». По-видимому, предупреждение о том, что использование устаревших API-интерфейсов управляется спецификацией языка.
Ваш лучший вариант - исправить использование устаревших API. Тем не менее, вариантом было бы добавить аннотацию @SuppressWarnings("deprecation")
к классам или методам, использующим устаревшие API.
При использовании gradle вы можете легко его настроить:
tasks.withType(JavaCompile) {
options.deprecation = false
}
(проверено с помощью Gradle 2 и Java 8)
Если вы компилируете в командной строке, вы можете фильтровать сообщения с помощью grep``, just filtering out the messages that has unwanted content, like for example
grip -v deprecated . You can use
| `для отправки вывода в grep, например
your compile command | grip -v deprecated
использовать атрибут nowarn, см. ниже
, например
<javac srcdir="src"
destdir="build/classes" source="1.6"
target="1.6" debug="true" encoding="Cp1252"
nowarn="on">
по умолчанию атрибут nowarn отключен
Для других, которые Google искали эту проблему и наткнулись на этот поток, как я это сделал ...
Попробуйте: -Xlint: -deprecation
Кажется, что работает на JDK 6 ... не уверен в других.
Два возможных способа:
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
не работает для меня, вместо этого я использовал
@SuppressWarnings("unchecked")
Если это основной Java API, почти наверняка будет замена, которая будет делать то, что вы хотите. Запустите javac с этим дополнительным параметром, а затем посмотрите на API для устаревшего метода и замените его соответствующим образом.
С Java 6 ни поддержка @Depreated, ни флаг компилятора не помогут вам здесь. Единственное решение, которое сработало для меня, - отправить комментарий javadoc с тегом @deprecated (small caps) на устаревший метод:
/**
* @deprecated overriding deprecated method
*/
@Override
public javax.xml.bind.Validator createValidator() throws JAXBException {...}
(пример из класса, который происходит из JAXBContext.)
(я не импортировал класс устаревших Validator, чтобы избежать предупреждения в инструкции import.)