Проблемы при создании и инициализации объектов - PullRequest
0 голосов
/ 13 октября 2018

Я кодировал один из моих последних школьных проектов, связанных с текстовым файлом, основанным на свадьбах.Я пытаюсь закодировать метод, который будет возвращать объект свадьбы,

(ПРИМЕЧАНИЕ: объект пропалывания состоит из brideName, groomName, weddingDate, Venue, количества гостей).

В обычном методе с использованием строк.Например, я просто набрал бы

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; 

Вот где я получаю ошибку 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;
}

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Полное решение вашей проблемы:

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

     }
}

Вывод -

[[groomName=Michael, brideName=Elisabeth, weddingDate=29 October 2018, venue=New Country Wedding Hall, Australia, numberOfGuests=2000]
, [groomName=John, brideName=Lisa, weddingDate=15 December 2018, venue=Lifelong Wedding Hall, USA, numberOfGuests=1500]
]
29 October 2018  
New Country Wedding Hall, Australia
[groomName=Michael, brideName=Elisabeth, weddingDate=29 October 2018, venue=New Country Wedding Hall, Australia, numberOfGuests=2000]

Я рекомендую вам использовать Коллекции Java для сложных программ Java и использовать длякаждая петля для прохождения ..

Спасибо :)

0 голосов
/ 13 октября 2018

Ваш код скажет, что это очевидно, поскольку возможно, что ваш код не попадет в блок if, а переменная temp останется неиспользованной.Таким образом, любой, кто его использует, должен проверить нулевое значение, прежде чем использовать эту временную переменную.

Существует несколько способов устранения этой ошибки:

  1. Игнорировать эту ошибку.Так как эта ошибка не остановит запуск вашего кода.

  2. вы можете использовать необязательный intead returing null, после этого ваш метод будет выглядеть следующим образом:

    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;    
    }
    
  3. Вам не нужноиспользуйте temp вообще, просто верните wedArr [loop] или null

0 голосов
/ 13 октября 2018

Перепишите метод таким образом.

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