【问题标题】:Java - trying to print a get method of an object from within the main method when object was created from another method [duplicate]Java - 当从另一个方法创建对象时,尝试从主方法中打印对象的 get 方法[重复]
【发布时间】:2019-02-27 13:28:27
【问题描述】:

我已经查看了有关从 main 方法访问对象实例的所有其他 stackoverflow 问题,但我没有尝试过任何方法,我仍然继续收到以下错误消息

java.59: error: cannot find symbol
        System.out.println(student2.getStudentId());

这是我的主要方法:

import java.util.Scanner;
import java.io.*;
import java.util.Arrays;

public class Testing { 

  public static void main (String [] args) throws IOException {


  final String INPUT_FILE  = "c:\\Users\\XXXXXX\\Documents\\Input01.txt"; 
  Scanner br = new Scanner(new File(INPUT_FILE));  

// Test 2 - Test first and second line of information from input file

  String[] strArray;
  while (br.hasNext()) {
  strArray = br.nextLine().split(",");
     if(strArray[0].equals("STUDENT")) {
        processStudentData(strArray);
        System.out.println(student2.getStudentId());
     }
     else
     if(strArray[0].equals("GRADE ITEM")) {
        processGradeItemData(strArray);
     }

  }

  } //end main

// ***************************************************************

// Uses string array from input file to create new student object
public static void processStudentData(String[] a) {

  System.out.println("Running Test 2a:");
  if (a[1].equals("ADD")) {
     Student student2 = new Student(a[2], a[3], a[4], a[5]);
  }

} // End processStudentData 

} //end Testing

这是我的学生班被修剪了:

public class Student {  

private String studentId;           // Unique ID for each Student
private String studentFirstName;    // Student's legal first name
private String studentLastName;     // Student's legal last name
private String studentEmail;        // Student's school email address

//************************************************************************

  Student() {

  } // end Student

//************************************************************************

  public Student(String studentId, String studentFirstName, String studentLastName, 
                  String studentEmail) {

     if (studentId.equals("")) {
        throw new IllegalArgumentException("Student ID cannot be blank.");
     }
     if (studentFirstName.equals("")) {
        throw new IllegalArgumentException("Student first name cannot be blank.");
     }
     if (studentLastName.equals("")) {
        throw new IllegalArgumentException("Student last name cannot be blank.");
     }
     if (studentEmail.equals("")) {
        throw new IllegalArgumentException("Student email cannot be blank.");
     }
     if (!studentEmail.contains("@")) {
        throw new IllegalArgumentException("Student email must have '@'.");
     }

     this.studentId = studentId;
     this.studentFirstName = studentFirstName;
     this.studentLastName = studentLastName;
     this.studentEmail = studentEmail;

  } // end Student

//************************************************************************

public String getStudentId() {

  return studentId;

} // end getStudentId

我需要能够使用我的 get 方法从 main 方法打印出学生信息,但仍然通过 processStudentData 方法实例化 student2 对象。我不想将我的 get 方法更改为 static,因为会有多个实例。

任何帮助将不胜感激。

更新:我添加了对 processStudentData 方法的返回,但仍然收到与以前相同的错误(main 方法没有改变,processStudentData 方法在下面更新):

public static Student processStudentData(String[] a){
  System.out.println("Running Test 2a:"); 
  if (a[1].equals("ADD")) {
     Student student2 = new Student(a[2], a[3], a[4], a[5]);     
     return student2;
  }  
  return null;
}

【问题讨论】:

    标签: java scope


    【解决方案1】:

    由于student2 被定义为processStudentDataif 语句中的局部变量,因此它只能在该上下文(定义它的上下文)中使用

    // Uses string array from input file to create new student object
    public static void processStudentData(String[] a) {
    
      System.out.println("Running Test 2a:");
      if (a[1].equals("ADD")) {
         Student student2 = new Student(a[2], a[3], a[4], a[5]);
      }
    
    } // End processStudentData 
    

    “A”解决方案是将结果返回给调用者...

    // Uses string array from input file to create new student object
    public static Student processStudentData(String[] a) {
    
      System.out.println("Running Test 2a:");
      if (a[1].equals("ADD")) {
         return new Student(a[2], a[3], a[4], a[5]);
      }
    
      return null;
    
    } // End processStudentData 
    

    然后你可以使用它...

    Student student = processStudentData(strArray);
    if (student != null) {
        System.out.println(student.getStudentId());
    }
    

    您可能想仔细看看:

    更多详情

    【讨论】:

      【解决方案2】:

      尝试做类似的事情:

      public static Student processStudentData(String[] a) {
          System.out.println("Running Test 2a:");
          if (a[1].equals("ADD")) {
              Student student2 = new Student(a[2], a[3], a[4], a[5]);
              return student2;
          }
          return null;
      }
      

      别忘了处理 NullPointerException。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多