2016-11-15 2 views
3

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

public class Class1(){ 

public void PleaseAndThankYous(){ 
Scanner scanner1 = new Scanner(System.in) 
input1 = Scanner1.nextLine(); 

if (input1.contains//blah blah blah blah... 


public class Intructions(){ 

public void Method2(){ 
Scanner scanner2 = new Scanner(System.in) 
input2 = Scanner2.nextLine(); 

if (input1.contains//blah blah blah blah... 

, а затем я называя их в моей основной строке, просто чтобы проверить их:

System.out.println("this is a test, ask me something") 
obj.PleaseAndThankYous(); 
obj.Intructions(); 

и мои консоли распечатывает так:

this is a test, ask me something //(out put string) 
make me a coffee please   //PleaseAndThankYous() reads this 
make me a coffee please   // Intructions() reads this; 
Making you a coffee, Sir. // (response) 

Я понимаю, что происходит, но я не могу думать иначе. Я также пробовал использовать тот же сканер с разными строками, и он все еще не работал. Как я могу сделать так, чтобы оба метода прочитали мою первую строку ввода, и мне не нужно вводить все дважды? Благодаря!

+3

прочитайте ввод в 'main', а затем передайте строку в качестве параметра' PleaseAndThankYous' и 'Intructions' –

ответ

2

Прямо сейчас у вас есть два способа, как это:

public void method() { 
    Scanner scanner = new Scanner(System.in) 
    input = Scanner.nextLine(); 

    if (input.contains //blah blah blah blah... 

Изменение их обоих, чтобы они принимают аргумент:

public void method(String input) {   
    if (input.contains //blah blah blah blah... 

Затем в основной метод передать вход вы хотите их читать, поэтому вместо того, чтобы:

method1(); 
method2(); 

Использование:

Scanner in = new Scanner(System.in); 
String input = Scanner.nextLine(); 
method1(input); 
method2(input); 

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

Это также лучше в нескольких отношениях - это увеличит производительность (поскольку вы только объявите сканер и прочитаете его один раз), и это сделает ваш код более модульным, так как вы можете иметь класс для обработки ввода и другого класса для обработки, вместо того, чтобы делать оба в нескольких местах.

+0

omg, genius. Благодаря! У меня теперь самая крутая программа :) – DJmendy

+0

@DJmendy рада помочь! – nhouser9

Смежные вопросы