Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在另一个方法中使用一个方法的变量?_Java - Fatal编程技术网

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

Java 如何在另一个方法中使用一个方法的变量?,java,Java,问题很简单,但不知道如何解决: 如何获取NameInput和categoryInput的值 public void create(){ Scanner scan = new Scanner(System.in); System.out.println("Name:"); String nameInput = scan.next(); System.out.println("Category:"); String c

问题很简单,但不知道如何解决:

如何获取NameInput和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);

}

尝试使用如下参数以避免编译器错误:

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在addToList方法上找不到symbol:nameInput,categoryInput:

这是因为您在create中定义了nameInput和categoryInput。。。但你在addToList中使用了它们

这里的问题是

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进一步说,定义一个新类可能是有意义的;将名称和类别作为成员的类。

您可以将它们移动到更高的范围,即将它们移动到方法之外。该变量只有在其位于匹配的“}”中的块结束时才可访问

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());

}

}
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

请阅读Java范围。是什么阻止您将这些值作为参数传递给addToList?或者,当您在某些全局数据结构中扫描这些值时,是什么阻止您存储这些值?编译器说:找不到符号,专注于addToList方法上的nameInput和categoryInput你在哪里调用addToList方法?你能发布代码在main方法中在哪里调用此方法来声明它们全局吗?我不应该在类型之前添加公共静态吗?当然这是最好的做法,但事实是我愿意知道如何从另一个方法获取变量,顺便说一句,我想我只是需要改变一下模式,嗯?我的意思是,与这个新方法相比,这种方法是不合适的。它不仅不能解决你帖子中的问题,甚至不能编译!是的,我知道,有人要完整的代码,顺便说一句,现在没事了,谢谢大家!