2015-07-06 5 views
0

Вопрос прост, но не может понять, как:Как использовать переменные метода в другом методе?

как мне вернуть значения именInput и categoryInput?

public void create(){ 

     Scanner scan = new Scanner(System.in); 
     System.out.println("Name:"); 
     String nameInput = scan.next(); 
     System.out.println("Category:"); 
     String categoryInput = scan.next(); 
     System.out.println(nameInput + " " + categoryInput); 
} 

public void addToList(){ 

     names.add(nameInput); 
     categories.add(categoryInput); 

} 
+9

Читайте на области Java. – Kon

+0

Что мешает вам передавать эти значения в качестве параметров в addToList? Или что мешает вам хранить эти значения при сканировании их в некоторой глобальной структуре данных? – Saurabh

+0

компилятор говорит: не может найти символ, фокусируясь на nameInput и categoryInput по методу addToList – FET

ответ

0

1) cannot find symbol: nameInput, categoryInput on the addToList method:

Это происходит потому, что вы определены nameInput и categoryInput в create() ... но вы используете их в "addToList().

Вопрос здесь «scope».

2) У вас есть (по крайней мере) три варианта:

  • Проходят переменные в качестве параметров

  • Объявите переменные глобально (как статические члены)

  • Ликвидация «addToList() ", и просто выполните эти две строки как часть" create() ".

3) Я рекомендовал бы сочетание двух последних вариантов:

public class MyClass { 
    private List<String> names; 
    private List<String> categories; 
    ... 

    public MyClass() { 
    names = new ArrayList<String>(); 
    categories = new ArrayList<String>(); 
    ... 

    public newItem() {  
    Scanner scan = new Scanner(System.in); 
     System.out.println("Name:"); 
     String nameInput = scan.next(); 
     System.out.println("Category:"); 
     String categoryInput = scan.next(); 
     names.add(nameInput); 
     categories.add(categoryInput); 
     System.out.println("newItem: " + nameInput + " " + categoryInput); 
    } 

4) Двигаясь дальше, он, вероятно, имеет смысл определить новый класс; класс, который имеет «имя» и «категория» в качестве членов.

+0

Чтобы объявить их глобальными, не следует ли добавлять статические объекты перед типом? – FET

+0

Уверен, что было бы лучше всего сделать, но факт в том, что я был готов узнать, как получить переменную из другого метода, по мнению Ватта, мне просто нужно изменить шаблон, а? Я имею в виду, что этот способ не был правильным по сравнению с этим новым – FET

0

Попробуйте использовать параметры, как это, чтобы избежать ошибок компилятора:

public void create(){ 

     Scanner scan = new Scanner(System.in); 
     System.out.println("Name:"); 
     String nameInput = scan.next(); 
     System.out.println("Category:"); 
     String categoryInput = scan.next(); 
     System.out.println(nameInput + " " + categoryInput); 
} 

public void addToList(int nameInput,int categoryInput){ 

     names.add(nameInput); 
     categories.add(categoryInput); 

} 

И убедитесь, что вы передаете эти параметры этого метода

+0

Нет, получите больше ошибок – FET

-1
import javax.swing.*; 
import java.util.*; 

public class clarify { 

ArrayList<String> names = new ArrayList<String>(); 
ArrayList<String> categories = new ArrayList<String>(); 

public static void main (String[] args){ 

    clarify clear = new clarify(); 

    clear.create(); 
    clear.addToList(); 
    clear.displayLists(); 
} 

public void create(){ 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Name:"); 
    String nameInput = scan.next(); 
    System.out.println("Category:"); 
    String categoryInput = scan.next(); 
    System.out.println(nameInput + " " + categoryInput); 
} 

public void addToList(){ 

    names.add(nameInput); 
    categories.add(categoryInput); 

} 

public void displayLists(){ 

     System.out.println(names.listIterator()); 

} 

} 
+0

Это не только не может решить вопрос в вашем сообщении - он даже не компилируется! – paulsm4

+0

Yeap знал, что кто-то попросил весь код, кстати, теперь все в порядке, спасибо, ребята! – FET

0

Вы можете перенести их в более широкий охват (т. Е. Перемещать их вне метода). Переменная доступна только до конца блока, в котором он находится (то есть соответствия «}»)

class Foo  
{ 
    String nameInput; 
    String categoryInput; 

    public void create(){ 

     Scanner scan = new Scanner(System.in); 
     System.out.println("Name:"); 
     nameInput = scan.next(); 
     System.out.println("Category:"); 
     categoryInput = scan.next(); 
     System.out.println(nameInput + " " + categoryInput); 

    } //Variables like 'scan' can't be used past this brace 

    public void addToList(int nameInput,int categoryInput){ 

     names.add(nameInput); 
     categories.add(categoryInput); 

    } 

} //The two variables can't be used past here 
Смежные вопросы