Java 实例化和初始化对象时出现的问题

Java 实例化和初始化对象时出现的问题,java,objectinstantiation,Java,Objectinstantiation,我一直在编写一个与基于婚礼的文本文件相关的期末项目。 我试图编写一个方法,返回一个婚礼对象 (注:除草对象包括新娘名、新郎名、婚礼日期、地点、宾客人数) 在使用字符串的普通方法中。例如,我只会打字 String temp = ""; 在我的数组中运行一个循环到一个循环。if语句 temp = temp + arr[loop].toString(); return temp; 但是现在当我申报结婚物品时: Wedding temp; - (As i cant initialize it a

我一直在编写一个与基于婚礼的文本文件相关的期末项目。 我试图编写一个方法,返回一个婚礼对象

(注:除草对象包括新娘名、新郎名、婚礼日期、地点、宾客人数)

在使用字符串的普通方法中。例如,我只会打字

String temp = ""; 
在我的数组中运行一个循环到一个循环。if语句

temp = temp + arr[loop].toString();

return temp;
但是现在当我申报结婚物品时:

Wedding temp; - (As i cant initialize it as there is no brideName etc.)
run loop
if statement
temp = temp + array[loop];

return temp; 
这里是我得到错误的临时可能还没有初始化

有人能帮我建议一下如何解决这个问题吗?多谢各位 下面是实际方法的样子

 public Wedding getWeddingsOnDay(String date, String venue)
{
    Wedding temp;
    for (int loop = 0; loop < counter; loop++)
    {
        if (wedArr[loop].getWeddingDate().equals(date) && wedArr[loop].getVenue().equals(venue))
            temp = wedArr[loop];
        else
            temp = null;
    }
    return temp;
}
公共婚礼星期二(字符串日期、字符串地点)
{
婚礼临时工;
for(int循环=0;循环<计数器;循环++)
{
if(wedArr[loop].getWeddingDate().equals(date)和&wedArr[loop].getVenue().equals(venue))
温度=wedArr[回路];
其他的
温度=零;
}
返回温度;
}

以这种方式重写该方法

public Wedding getWeddingAt(String date, String venue) {
    for (Wedding w : wedArr)
    {
        if (w.getWeddingDate().equals(date) &&
                w.getVenue().equals(venue)) {
            return w;
        }
    }
    return null;
}

您的问题的完整解决方案:

package pojo.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Wedding {

    private String groomName;
    private String brideName;
    private String weddingDate;
    private String venue;
    private int numberOfGuests;
    /**
     * 
     */
    public Wedding() {
        super();
    }
    /**
     * @return the groomName
     */
    public String getGroomName() {
        return groomName;
    }
    /**
     * @param groomName the groomName to set
     */
    public void setGroomName(String groomName) {
        this.groomName = groomName;
    }
    /**
     * @return the brideName
     */
    public String getBrideName() {
        return brideName;
    }
    /**
     * @param brideName the brideName to set
     */
    public void setBrideName(String brideName) {
        this.brideName = brideName;
    }
    /**
     * @return the weddingDate
     */
    public String getWeddingDate() {
        return weddingDate;
    }
    /**
     * @param weddingDate the weddingDate to set
     */
    public void setWeddingDate(String weddingDate) {
        this.weddingDate = weddingDate;
    }
    /**
     * @return the venue
     */
    public String getVenue() {
        return venue;
    }
    /**
     * @param venue the venue to set
     */
    public void setVenue(String venue) {
        this.venue = venue;
    }
    /**
     * @return the numberOfGuests
     */
    public int getNumberOfGuests() {
        return numberOfGuests;
    }
    /**
     * @param numberOfGuests the numberOfGuests to set
     */
    public void setNumberOfGuests(int numberOfGuests) {
        this.numberOfGuests = numberOfGuests;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "[groomName=" + groomName + ", brideName=" + brideName + ", weddingDate=" + weddingDate
                + ", venue=" + venue + ", numberOfGuests=" + numberOfGuests + "]\n";
    }

    /**
     * 
     * @param weddingList
     * @param date
     * @param venue
     * @return
     */
    public List<Wedding> getWeddingsOnDay(List<Wedding> weddingList, String date, String venue)
    {
        List<Wedding> weddingFound = new ArrayList<Wedding>(); 
        for (Wedding wed : weddingList)
        {
            if (wed.getWeddingDate().equals(date) && wed.getVenue().equals(venue))
                weddingFound.add(wed);
        }
        return weddingFound;
    }

}

/**
 * Testing 
 * 
 * @author Anish
 *
 */
public class Test {
     public static void main(String...args) {

         List<Wedding> weddingList = new ArrayList<Wedding>();

         //first data
         Wedding weddingFirstCouple = new Wedding();
         weddingFirstCouple.setBrideName("Elisabeth");
         weddingFirstCouple.setGroomName("Michael");
         weddingFirstCouple.setWeddingDate("29 October 2018");
         weddingFirstCouple.setVenue("New Country Wedding Hall, Australia");
         weddingFirstCouple.setNumberOfGuests(2000);
         weddingList.add(weddingFirstCouple);

         //second data
         Wedding weddingSecondCouple = new Wedding();
         weddingSecondCouple.setBrideName("Lisa");
         weddingSecondCouple.setGroomName("John");
         weddingSecondCouple.setWeddingDate("15 December 2018");
         weddingSecondCouple.setVenue("Lifelong Wedding Hall, USA");
         weddingSecondCouple.setNumberOfGuests(1500);
         weddingList.add(weddingSecondCouple);

         System.out.println(weddingList);

         //checking the Wedding Date : getWeddingOnDay
         //lets see..
         Wedding wedObj = new Wedding();
         Scanner sc = new Scanner(System.in);
         String weddingDate = sc.nextLine();
         String venue = sc.nextLine();
         List<Wedding> weddingCoupleListOnTheDay = wedObj.getWeddingsOnDay(weddingList, weddingDate, venue);
         for(Wedding weddingCoupleOnTheDay : weddingCoupleListOnTheDay) {
             System.out.println(weddingCoupleOnTheDay);
         }

     }
}
我建议您对复杂的Java程序使用Java集合,并对每个循环使用Java集合进行横向转换。


谢谢:)

您的代码会这样说,因为您的代码可能不会进入if块,并且temp variable保持未使用状态。所以,任何使用它的人都需要在使用这个临时变量之前检查null值

有几种方法可以删除此错误:

  • 忽略此错误。因为此错误不会停止运行代码

  • 您可以使用returing null的可选intead,在此之后,您的方法将像下面的方法一样运行:

    public Optional<Wedding> getWeddingsOnDay(String date, String venue){
    
      Optional<Wedding> temp;
      for (int loop = 0; loop < counter; loop++) {
          if (wedArr[loop].getWeddingDate().equals(date) && wedArr[loop].getVenue().equals(venue)) { 
              temp = Optional.of(wedArr[loop]);}
     else{
              temp = Optional.empty(); 
      }
    }
      return temp;    
    }
    
    public可选getWeddingsOnDay(字符串日期、字符串地点){
    可选温度;
    for(int循环=0;循环<计数器;循环++){
    如果(wedArr[loop].getWeddingDate().equals(date)和&wedArr[loop].getVenue().equals(venue)){
    temp=可选的(wedArr[loop]);}
    否则{
    temp=可选的.empty();
    }
    }
    返回温度;
    }
    
  • 您根本不需要使用temp,只需返回wedArr[loop]或null即可


  • 在使用对象之前,将引用
    temp
    指定给该对象。
    public Optional<Wedding> getWeddingsOnDay(String date, String venue){
    
      Optional<Wedding> temp;
      for (int loop = 0; loop < counter; loop++) {
          if (wedArr[loop].getWeddingDate().equals(date) && wedArr[loop].getVenue().equals(venue)) { 
              temp = Optional.of(wedArr[loop]);}
     else{
              temp = Optional.empty(); 
      }
    }
      return temp;    
    }