如何在另一种方法中使用方法的变量?

时间:2015-07-06 21:22:51

标签: java

问题很简单,但无法弄清楚:

如何找回namesInput和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);

}

4 个答案:

答案 0 :(得分: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);

}

并确保将此参数传递给此方法

答案 1 :(得分:0)

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

这是因为您在create()中定义了 nameInput和categoryInput ...但是您在“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)更进一步,定义一个 new 类可能是有意义的;具有“名称”和“类别”作为成员的类。

答案 2 :(得分: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

答案 3 :(得分:-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());

}

}