Подтвердить что ты не робот

Как очистить буфер сканера в Java?

У меня есть что-то вроде этого:

    Scanner in=new Scanner(System.in);
    int rounds = 0;
    while (rounds < 1 || rounds > 3) {
        System.out.print("How many rounds? ");
        if (in.hasNextInt()) {
            rounds = in.nextInt();
        } else {
            System.out.println("Invalid input. Please try again.");
            System.out.println();
        }
        // Clear buffer
    }
    System.out.print(rounds+" rounds.");

Как очистить буфер?

Изменить: я попробовал следующее, но по какой-то причине это не работает:

while(in.hasNext())
    in.next();
4b9b3361

Ответ 1

Вы не можете явно очистить буфер сканера. Внутри он может очистить буфер после считывания токена, но что деталь реализации вне досягаемости программторов.

Ответ 2

Попробуйте следующее:

in.nextLine();

Это ускоряет сканирование до следующей строки.

Ответ 3

Это должно исправить это...

Scanner in=new Scanner(System.in);
    int rounds = 0;
    while (rounds < 1 || rounds > 3) {
        System.out.print("How many rounds? ");
        if (in.hasNextInt()) {
            rounds = in.nextInt();
        } else {
            System.out.println("Invalid input. Please try again.");
            in.next(); // -->important
            System.out.println();
        }
        // Clear buffer
    }
    System.out.print(rounds+" rounds.");

Ответ 4

Используйте следующую команду:

in.nextLine();

сразу после

System.out.println("Invalid input. Please Try Again.");
System.out.println();

или после следующей фигурной скобки (где ваш комментарий к ней есть).

Эта команда продвигает сканер на следующую строку (при чтении из файла или строки, это просто читает следующую строку), тем самым, по существу, его промывая. Он очищает буфер и готовит сканер для нового ввода. Его можно, предпочтительно, использовать для очистки текущего буфера, когда пользователь ввел недопустимый ввод (например, письмо при запросе номера).

Документацию по методу можно найти здесь: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()

Надеюсь, это поможет!

Ответ 5

Вставьте строку

in.nextLine();

Ответ 6

Попробуйте этот код:

Scanner in=new Scanner(System.in);
    int rounds = 0;
    while (rounds < 1 || rounds > 3) {
        System.out.print("How many rounds? ");
        if (in.hasNextInt()) {
            rounds = in.nextInt();
        } else {
             in.NextLine(); // to clear Scanner
      //You can  throw new InputMismatchException();
            System.out.println("Invalid input. Please try again.");
            System.out.println();
        }

    }
    System.out.print(rounds+" rounds.");

Ответ 7

Одним из решений является размещение объекта банка внутри цикла do-while в главном, чтобы каждый новый объект банка создавался.

Однако это создает определенные проблемы, а именно массив учетных записей и переменную count. Вы можете исправить это, поместив их в bankUser.

static int count = 0;  //don't forget to make count global and initialize
public static void main(String[] args) {


    int Choice; 
    //place the Acct array inside bankUser main or declare
    //as global
    bankAcct myAcct[] = new bankAcct[3]; 

    do
    { //Place the bank object inside the do-while
    Bank myBank = new Bank(count, myAcct); //pass the variables to the 
                                           //new Bank object
    dispMenu();

    Choice = getChoice();

    proChoice(Choice, myBank);

    }   
    while (Choice !=0);
   }

Не забудьте сделать счетчик глобальным, потому что он должен быть способен быть передан в объект в главном И добавлен в openScct с открытым ключом в методе proChoice.

case 1: myBank.openAcct();
    count++;
    break;

Наконец, вы можете передать массив myAcct и переменную count через объект, используя конструктор в классе банка.

public Bank(int count, bankAcct myAcct[]) {
this.count = count;
this.myAcct = myAcct;

}

Ответ 8

Это работает для меня. Это не совсем надежно, потому что available() - это только оценка, но я просто хочу очистить большую часть ввода после того, как пользователь удерживал клавишу, чтобы она повторилась. Я не против получить одного или двух дополнительных персонажей. Это из класса консоли, который я использую для чтения необработанного ввода с консоли: http://www.source-code.biz/snippets/java/RawConsoleInput/

public void Clear() {
    try {
        System.in.skip(System.in.available());
    } catch (IOException ex) {
        Logger.getLogger(ConReader.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Ответ 9

Другие люди предложили использовать in.nextLine() для очистки буфера, который работает для однострочного ввода. Однако, как отмечают комментарии, иногда ввод System.in может быть многострочным.

Вместо этого вы можете создать новый объект Scanner, в котором вы хотите очистить буфер, если вы используете System.in, а не какой-либо другой InputStream.

in = new Scanner(System.in);

Если вы делаете это, не вызывайте in.close(). Это закроет System.in, и вы получите NoSuchElementExceptions при последующих вызовах in.nextInt(); System.in, вероятно, не должен быть закрыт во время вашей программы.

(Вышеуказанный подход специфичен для System.in. Он может не подходить для других входных потоков.)

Если вам действительно нужно закрыть свой объект Scanner перед созданием нового, fooobar.com/questions/278986/... предлагает создать оболочку InputStream для System.in, которая имеет собственный метод close(), который не закрывает упакованный поток System.in. Это излишне для простых программ.

Ответ 10

朕 深 ク 世界 ノ 大勢 ト 帝國 ノ 現狀 ト ニ 鑑 ミ, 非常 ノ 措置 ヲ 以 テ 時局 ヲ 收拾 セ ム ト 欲 シ, 茲 ニ 忠良 ナ ル 爾 臣民 ニ 告 ク.

米 ・ 帝國 政府 ヲ テ 、 米 [米 1] ・ 英 支 支 [註 2] ・ 蘇 四 國 ニ 對 シ 、 共同 宣言 宣言 ヲ 受 ス 通告 シ シ

米 ゝ 帝國 臣民 康寧 ヲ 圖 リ 共榮 共榮 共榮 ノ ヲ ヲ ス ル ル ハ 、 皇祖 皇 遺 遺 シ テ 、 朕 米 米 米 米 米 米] ]所以, 亦 實 ニ 帝國 ノ 自 存 ト 東亞 ノ 安定 ト ヲ 庶幾 ス ル ニ 出 テ, 他 國 ノ 主權 ヲ 排 シ 領土 ヲ 侵 ス カ 如 キ ハ, 固 ヨ リ 朕 カ 志 ニ ア ラ ス. 然 ル ニ 交戰 已 ニ 四 歳 ヲ 閲 シ, 朕カ 陸 海 將兵 ノ 勇 戰, 朕 カ 百僚 有司 ノ 勵 精, 朕 カ 一 億 衆庶 ノ 奉公, 各 ゝ 最 善 ヲ 盡 セ ル ニ 拘 ラ ス, 戰局 必 ス シ モ 好轉 セ ス, 世界 ノ 大勢 亦 我 ニ 利 ア ラ ス.註 敵 、 新 殘虐 ナ ル ヲ 使用 シ テ テ [註 3] 、 頻 ニ 無辜 殺傷 シ シ 害 害 害 所 所 、 眞 至 ニ 繼續 モ モ モ モ 尚 尚民族 ノ 滅亡 ヲ 招來 ス ル ノ ミ ナ ラ ス, 延 テ 人類 ノ 文明 ヲ モ 破 却 ス ヘ シ. 斯 ノ 如 ク ム ハ, 朕 何 ヲ 以 テ カ 億 兆 ノ 赤子 ヲ 保 シ, 皇祖 皇 宗 ノ 神靈 ニ 謝 セ ム ヤ. 是 レ 朕 カ 國 政府 ヲ シ テ, 共同 宣言 ニ 應 セ シ ム ル ニ 至 レ ル 所以 ナ リ.

朕 ハ 帝國 ト 共 ニ 終始 東亞 ノ 解放 ニ 協力 セ ル 諸 盟邦 ニ 對 シ, 遺憾 ノ 意 ヲ 表 セ サ ル ヲ 得 ス. 帝國 臣民 ニ シ テ, 戰陣 ニ 死 シ, 職 域 ニ 殉 シ, 非 命 ニ 斃 レ タ ル 者, 及其 ノ 遺 族 ニ 想 ヲ 致 セ ハ, 五内 爲 ニ 裂 ク. 且 戰 傷 ヲ 負 ヒ, 災禍 ヲ 蒙 リ, 家業 ヲ 失 ヒ タ ル 者 ノ 厚生 ニ 至 リ テ ハ, 朕 ノ 深 ク 軫 念 ス ル 所 ナ リ. 惟フ ニ 今後 帝國 ノ 受 ク ヘ キ 苦難 ハ, 固 ヨ リ 尋常 ニ ア ラ ス. 爾 臣民 ノ 衷情 モ, 朕 善 ク 之 ヲ 知 ル. 然 レ ト モ 朕 ハ 時運 ノ 趨 ク 所, 堪 ヘ 難 キ ヲ 堪 ヘ 忍 ヒ 難 キ ヲ 忍ヒ, 以 テ 萬世 ノ 爲 ニ 太平 ヲ 開 カ ム ト 欲 ス.

朕 ハ 茲 ニ 國體 ヲ 護持 シ 得 テ, 忠良 ナ ル 爾 臣民 ノ 赤誠 ニ 信 倚 シ, 常 ニ 爾 臣民 ト 共 ニ 在 リ. 若 シ 夫 レ 情 ノ 激 ス ル 所, 濫 ニ 事端 ヲ 滋 ク シ, 或ハ 同胞 排擠, 互 ニ 時局 ヲ 亂 リ, 爲 ニ 大道 ヲ 誤 リ, 信義 ヲ 世界 ニ 失 フ カ 如 キ ハ, 朕 最 モ 之 ヲ 戒 ム. 宜 シ ク 擧國 一家, 子孫 相傳 ヘ, 確 ク 神州 ノ不滅 ヲ 信 シ, 任重 ク シ テ 道遠 キ ヲ 念 ヒ, 總 力 ヲ 將來 ノ 建設 ニ 傾 ケ, 道義 ヲ 篤 ク シ, 志 操 ヲ 鞏 ク シ, 誓 テ 國體 ノ 精華 ヲ 發揚 シ, 世界 ノ 進 運 ニ 後 レ サ ラ ム コ ト ヲ期 ス ヘ シ. 爾 臣民, 其 レ 克 ク 朕 カ 意 ヲ 體 セ ヨ.

Ответ 11

   "Auf längere Auseinandersetzungen Forckenbecks über das Bewilligungsrecht und den Art. 99 der Verfassung und über den Wunsch des Volkes nach der verkürzten Dienstzeit erwidert Bismarck:

Er wolle gern auf den Etat für 1862 eingehen, ohne jedoch eine präjudizierliche Erklärung abzugeben. Ein Mißbrauch von Verfassungsrechten könne von allen Seiten getrieben werden. Das führe dann zur Gegenwirkung von der anderen Seite. Die Krone z. B. könne zwölfmal hintereinander auflösen, das sei gewiß nach dem Buchstaben der Verfassung erlaubt, würde aber doch Mißbrauch sein. Ebenso könne sie Streichungen des Budgets zurückweisen, ohne Maß; да сейи умирают Гренце швер цу зихен; сей сие щон бей 6 миллионов? Бей 16? Одер бей 60? Es gebe Mitglieder des Nationalvereins, eines wegen der Gerechtigkeit seiner Forderungen zu Ansehen gelangten Vereins - безмятежный призрак Mitglieder, который можно увидеть здесь. Ja, wenn nun eine Volksvertretung diese Ansicht hätte! Что это такое? Regierung das zurückweisen? Von der "Nüchternheit" des preußischen Volkes sei die Rede gewesen. Ja, die große Selbständigkeit des einzelnen mache es schwierig in Preußen, mit der Verfassung zu regieren (oder die Verfassung zu konsolidieren?). Во Франкфурте-на-Майне, da fehle diese индивидуальный Selbständigkeit. Eine Verfassungskrisis Sei Keine Schande, Зонне Эйн Эре. Wir sind ferner vielleicht zu "gebildet" um eine Verfassung zu tragen; Wir Sind Zu Kritisch; die Befähigung, Regierungsmaßregeln, Akte der Volksvertretung zu beurteilen, ist zu allgemein; im Lande gibt es eine Menge katilinarischer Existenzen, die ein großes Интересует Umwälzungen haben. Das mag paradox klingen, beweist aber doch alles, wie schwer in Preußen verfassungsmäßiges Leben ist. Man is ferner zu empfindlich gegen Fehler der Regierung; Все ли, кто хочет, министр иностранных дел, Фелер Гемахт, что еще лучше? - Die Meffung Wechsle, Presse Sei Nicht Die Meffung; мужик, ты умрешь! Die Abgeordneten hätten die höhere Aufgabe, die Stimmung zu leiten, über ihr zu stehen. Wir haben zu heißes Blut, wir haben die Vorliebe, eine zu große Rüstung für unsern schmalen Leib zu tragen; nur sollen wir sie auch utilisieren. Nicht auf Preußens Liberalismus sieht Deutschland, sondern auf seine Macht; Бавария, Вюртемберг, Баден-Мёген-де-Либерализм индульгьерен, Дарум Вирд, Ихен Дох Кейнер, Preußens Rolle anweisen. Preußen muß seine Kraft zusammenfassen und zusammenhalten auf den günstigen Augenblick, der schon einige Male verpaßt ist; Preußens Grenzen nach den Wiener Verträgen sind zu einem gesunden Staatsleben nicht günstig; В настоящее время он не имеет ничего общего с Фрейлером, основанным в 1848 и 1849 гг. Die vorjährige Bewilligung sei erfolgt; aus welchen Gründen, sei gleichgültig; Это означает, что мы должны найти окончательный вариант, но не все. Человек, лежащий на своем пути, совершает совершенные преступления. Венн Кейн Бюджет Зустанде Комме, Данн Сей Табула Раса; die Verfassung biete keinen Ausweg, denn da stehe Интерпретация gegen Интерпретация; summum ius, sumiiuria; der Buchstabe tötet. Er freue sich, daß die Außerung des Referenten, wegen Möglichkeit eines and anderen Beschlusses des Hauses распространяют информацию о своей работе, получают дополнительную информацию; er suche diese Brücke auch; Хочу познакомиться с Гефунден Верде, Стехе Дахин. Das Zustandekommen eines "Бюджеты" в "Jahre sei der Zeit nach kaum möglich"; wir seien ja in exzeptionellen Zuständen; das Prinzip der schleunigen Vorlegung des Budgets sei ja auch von der Regierung anerkannt; мудрец, дас сей шон часто верспрохен и нихт гехалтен; монахиня "Sie können doch uns als ehrlichen Leuten trauen." Die Interpellation, es sei verfassungswidrig, verweigerte Ausgaben zu machen, teile er nicht; zu jeder Интерпретация sei Übereinstimmung der drei Faktoren nötig. "**