Нужна помощь в компиляции Java (аксессоры, мутаторы, конструкторы)

Итак, я работаю над этим проектом уже некоторое время, и по какой-то причине у меня много проблем с пониманием Java.

Цель состоит в том, чтобы создать 3 объекта, каждый из которых содержит 3 фрукта, и каждый фрукт имеет свою цену/стоимость.

В настоящее время у меня проблемы с суммированием значений, я уверен, что есть гораздо больше неправильных значений, поскольку я сказал, что у меня пока много проблем с Java.

Моя самая большая проблема в настоящее время - метод costofBox().

Буду очень признателен за любые полезные предложения, я работаю над этим уже более недели.

Вот вся программа:

public class Project8
{

private String fruit1;
private String fruit2;
private String fruit3;
private String Bundle1;
private String Bundle2;
private String Bundle3;
private int costofBox;
double total;
int broccoli;
int tomato;
int kiwi;
int kale;
int orange;

public String toString()
{
    String output = "The box contains: " + Bundle1 + ", " + Bundle2 + ", " + Bundle3 +
    "and the cost is $" + costofBox();
    return output;
}

public String getBundle1()
{
    return Bundle1;
}
public String getBundle2()
{
    return Bundle2;
}
public String getBundle3()
{
    return Bundle3;
}


public void setBundle1(String Bundle1) 
{
    Bundle1=fruit1;
}
public void setBundle2(String Bundle2) 
{
    Bundle2=fruit2;
}
public void setBundle3(String Bundle3) 
{
    Bundle3=fruit3;
}

public double costofBox()
{
    double total=0;
    if(Bundle1.equals("broccoli"))
        total+=6;
    else if(Bundle1.equals("tomato"))
        total+=5;
    else if(Bundle1.equals("kiwi"))
        total+=8;
    else if(Bundle1.equals("kale"))
        total+=4;
    else if(Bundle1.equals("orange"))
        total+=7;
    if(Bundle2.equals("broccoli"))
        total+=6;
    else if(Bundle2.equals("tomato"))
        total+=5;
    else if(Bundle2.equals("kiwi"))
        total+=8;
    else if(Bundle2.equals("kale"))
        total+=4;
    else if(Bundle2.equals("orange"))
        total+=7;
    if(Bundle3.equals("broccoli"))
        total+=6;
    else if(Bundle3.equals("tomato"))
        total+=5;
    else if(Bundle3.equals("kiwi"))
        total+=8;
    else if(Bundle3.equals("kale"))
        total+=4;
    else if(Bundle3.equals("orange"))
        total+=7;

    return total;
}

public Project8()
{    
    fruit1 = "broccoli" + "kale" + "orange";
    fruit2 = "kale" + "kiwi" + "orange";
    fruit3 = "broccoli" + "tomato" + "kiwi";
}

public Project8(String fruit1, String fruit2, String fruit3)
{
    String Bundle1=fruit1;
    String Bundle2=fruit2;
    String Bundle3=fruit3;
}

public static void main (String [] args)
{
    Project8 Bundle1=new Project8 ("broccoli", "kale", "orange");
    Project8 Bundle2=new Project8 ("kale", "kiwi", "orange");
    Project8 Bundle3=new Project8 ("broccoli", "tomato", "kiwi");



    System.out.println("Week 1: " + Bundle1.toString());
    System.out.println("Week 2: " + Bundle2.toString());
    System.out.println("Week 3: " + Bundle3.toString());
    System.out.println("Week4: The box contains:,, and the cost is $0.0");
    }
}

Заранее благодарю всех, кто может мне помочь!


person distro    schedule 31.03.2017    source источник
comment
Похоже, вам лучше использовать Map<String, Double> для представления цен на каждый товар.   -  person Andy Turner    schedule 31.03.2017
comment
Вы должны взглянуть на forloop и whileloop   -  person jhamon    schedule 31.03.2017
comment
Переменные, такие как Bundle1, всегда должны начинаться со строчной буквы. Нет ничего, что навязывало бы это, но это широко используемое соглашение, которое сделает ваш код более понятным. Точно так же классы должны начинаться с заглавной буквы.   -  person Michael    schedule 31.03.2017
comment
Вы неправильно ссылаетесь на свои значения, а не сохраняете свои значения в переменных, вы сохраняете свои значения в новых значениях String, поэтому вы не можете получить доступ к тем значениям, которые вы передали своему объекту в вашем методе toString()   -  person Kebab Programmer    schedule 31.03.2017
comment
Посмотрите на ответ @Michael   -  person Kebab Programmer    schedule 31.03.2017


Ответы (1)


Ваша проблема в этом конструкторе:

public Project8(String fruit1, String fruit2, String fruit3)
{
    String Bundle1=fruit1;
    String Bundle2=fruit2;
    String Bundle3=fruit3;
}

Из-за типа String перед этими присваиваниями вы объявляете новые локальные переменные! Это означает, что поля вашего класса:

private String Bundle1;
private String Bundle2;
private String Bundle3;

... никогда не присваиваются значения. Когда вы пытаетесь получить к ним доступ, вы получаете исключение, которое вы видели, потому что они NULL.

Если вы измените конструктор на:

public Project8(String fruit1, String fruit2, String fruit3)
{
    Bundle1 = fruit1;
    Bundle2 = fruit2;
    Bundle3 = fruit3;
}

тогда ваш проект будет выполнен правильно.


Кроме того, существует множество способов сократить длину программы, сделать ее более лаконичной и меньше повторяться. Я предлагаю, как только вы заработаете, перейти на Code Review, который является дочерним сайтом StackOverflow: они дадут вам предложения. улучшить. Если вы решите это сделать, напишите мне комментарий к этому ответу!

person Michael    schedule 31.03.2017
comment
Конструктор неправильный, и он уже создал свой набор строк, ему нужно передать ему переменные, используя this.Bundle1 = fruit1 - person Kebab Programmer; 31.03.2017
comment
Что ты имеешь в виду? Вам не нужно this., потому что нет конфликта имен. Кроме того, я скомпилировал и запустил его с предложенным изменением, и он работает правильно. - person Michael; 31.03.2017
comment
да, это правда, но это также правильно, если вы используете this.bundle. Я все еще проголосовал, потому что это правильное решение - person Kebab Programmer; 31.03.2017
comment
БОЛЬШОЕ СПАСИБО! Вы понятия не имеете, я прочитал так много глав в разных книгах и посмотрел так много видео, я рад, что это работает, хотя я знаю, что это небрежно, но я использую объекты, которые я сделал, в учебных целях. - person distro; 31.03.2017
comment
@дистрибутив Нет проблем. Рад помочь. - person Michael; 31.03.2017
comment
this.bundle просто заставил бы меня написать больше, и я понимаю, как это. работает (одна из немногих вещей, которые я полностью понял с первой попытки) - person distro; 31.03.2017