Java: проблемы с 0 конструкторами и конструкторами arg - PullRequest
0 голосов
/ 17 сентября 2018

У меня много проблем при попытке создать конструктор, в котором переменные уже имеют значения по умолчанию, а затем вызвать новые переменные, которые я позже установил в классе TestGuitar.Я успешно компилировал мою программу и печатал значения по умолчанию.Мне не удалось сохранить новые, которые я пытался установить в переменной newGuitar в классе TestGuitar.Я знаю, что все проблемы исходят от моих конструкторов.В этой ситуации мне нужен конструктор 0 arg, который создает гитару по умолчанию, и новый конструктор, который создает очень специфическую гитару.

Я установил некоторые частные переменные для гитары по умолчанию.Я хочу, чтобы моя программа возвращала переменные по умолчанию, если я никогда не передаю переменную newGuitar в классе TestGuitar.Если я что-то передаю, т.е. guitarLength 24.75, я хочу, чтобы моя программа вернула это.Более того, я хочу, чтобы эта новая переменная вызывалась методом геттера.Я считаю, что у меня есть решение на 75%, но мне нужна помощь конкретно с проблемами конструктора под рукой.Я просто не думаю, что я достаточно разбираюсь в понятиях конструкторов, чтобы включить 0 arg и определенный конструктор одновременно.

//File name: Guitar.java
//Autor: Michael Joy
//Date: 09/16/2018
//Purpose: Building and testing guitar objects

import java.awt.Color;
import java.util.*;
import java.util.Random;

class Guitar {
    //defines the default values for our default guitar if we do not pass anything new to the object
    private int numStrings = 6;
    private double guitarLength = 28.2;
    private String guitarManufacturer = "Gibson";
    private Color guitarColor = Color.RED;
    private static int i = 1;
    private static Random rand = new Random();

    //declaring the constructor
    public Guitar (){
        //all my problems coming from here
        this.numStrings = numStrings;
        this.guitarLength = guitarLength;
        this.guitarManufacturer = guitarManufacturer;
        this.guitarColor = guitarColor;
    }

    public Guitar (int strings, double length, String manufacturer, Color color){
        //more problems here
         strings = this.numStrings;
         length = this.guitarLength;
         manufacturer = this.guitarManufacturer;
         color = this.guitarColor;
         System.out.printf("toString: %s \n ", this);
    }

    public int getNumStrings() {
      return numStrings;
    }

    public double getGuitarLength() {
      return guitarLength;
    }

    public String getGuitarManufacturer() {
      return guitarManufacturer;
    }

    public Color getGuitarColor(){
      return this.guitarColor;
    }

    public static void playGuitar(){
        String[] musicNotes = {"A", "B", "C", "D", "E", "F", "G"};
        String[] musicDuration = {"(0.25)","(0.5)","(1)", "(2)","(4)"};
         System.out.print("playGuitar: ");
         for (i = 1; i < 17; i++){
            int index1 = rand.nextInt(musicNotes.length);
            int index2 =  rand.nextInt(musicDuration.length);
            System.out.print(musicNotes[index1]);
            System.out.print(musicDuration[index2] + ",");
            }
         }

    public String toString(){
        return String.format("%d, %f, %s, %s", numStrings, guitarLength, guitarManufacturer, guitarColor);
    }
}

class TestGuitar extends Guitar{
        public static void main (String args[] ){
          Guitar newGuitar = new Guitar(6, 24.75, "Les Paul", Color.white);
          playGuitar();
  }
}

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Ваши начальные значения по умолчанию принадлежат конструктору no-args.Затем вам нужно исправить порядок, в котором вы присваиваете значения во втором конструкторе.Например,

private int numStrings;
private double guitarLength;
private String guitarManufacturer;
private Color guitarColor;
private static int i = 1;
private static Random rand = new Random();

// declaring the constructor
public Guitar() {
    this.numStrings = 6;
    this.guitarLength = 28.2;
    this.guitarManufacturer = "Gibson";
    this.guitarColor = Color.RED;
}

public Guitar(int strings, double length, String manufacturer, Color color) {
    this.numStrings = strings;
    this.guitarLength = length;
    this.guitarManufacturer = manufacturer;
    this.guitarColor = color;
    System.out.printf("toString: %s \n ", this);
}

Обратите внимание, что первый конструктор может быть переписан для использования другого конструктора.Мол,

// declaring the constructor
public Guitar() {
    this(6, 28.2, "Gibson", Color.RED);
}
0 голосов
/ 17 сентября 2018
class Guitar {
private static int i = 1;
private static Random rand = new Random();
private int numStrings;
private double guitarLength ;
private String guitarManufacturer;
private Color guitarColor;

//declaring the constructor
public Guitar (){
    //all my problems coming from here
    numStrings = 6;
    guitarLength = 28.2;
    guitarManufacturer = "Gibson";
    guitarColor = Color.RED;
}

public Guitar (int strings, double length, String manufacturer, Color color){
    this.numStrings = Strings;
    this.guitarLength = length;
    this.guitarManufacturer = manufacturer;
    this.guitarColor = color;
     System.out.printf("toString: %s \n ", this);
}
public int getNumStrings() {
  return numStrings;
}

public double getGuitarLength() {
  return guitarLength;
}

public String getGuitarManufacturer() {
  return guitarManufacturer;
}

public Color getGuitarColor(){
  return this.guitarColor;
}

public static void playGuitar(){
    String[] musicNotes = {"A", "B", "C", "D", "E", "F", "G"};
    String[] musicDuration = {"(0.25)","(0.5)","(1)", "(2)","(4)"};
     System.out.print("playGuitar: ");
     for (i = 1; i < 17; i++){
        int index1 = rand.nextInt(musicNotes.length);
        int index2 =  rand.nextInt(musicDuration.length);
        System.out.print(musicNotes[index1]);
        System.out.print(musicDuration[index2] + ",");
        }
     }

public String toString(){
    return String.format("%d, %f, %s, %s", numStrings, guitarLength, guitarManufacturer, guitarColor);
}
}

Вы также можете использовать 1 конструктор:

public Guitar (int strings=6, double length=28.2, String manufacturer="Gibson", Color color=Color.RED){
        this.numStrings = Strings;
        this.guitarLength = length;
        this.guitarManufacturer = manufacturer;
        this.guitarColor = color;
         System.out.printf("toString: %s \n ", this);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...