我正在尝试创建一个吉他程序。我有一个吉他放大器类,有一个声音对象,我试图在我的拾音器类中访问。我的目标是将我的拾音器类中的声音属性设置为与GuitarAmp类中的声音属性相同,这样我就可以设置我的弦乐的所有声音属性。我真的不确定如何做到这一点,我读过的关于Java中的获取和设置的文章一直没有帮助。我有下面列出的两个课程,任何有关获取和设置的帮助都将不胜感激。
public class GuitarAmp
{
// This is what I want to get from this class
public GuitarAmpSound sound;
public GuitarAmp(GuitarAmpSound sound, int volume, int distortSetting) {
sound = new GuitarAmpSound();
sound.setVolume(64);
sound.setDistortSetting(GuitarAmpSound.JAZZ);
}
public void changeVolume(int newVolume)
{
sound.setVolume(newVolume);
}
}
这是皮卡类。
public class GuitarPickup {
public GuitarAmpSound pickupSound;
public void Connect(GuitarString strings[], GuitarAmp amp)
{
pickupSound = new GuitarAmpSound();
//This is where I need to set it
for(int i = 1; i <= 6; i++)
{
strings[i].setSound(pickupSound);
}
}
}
答案 0 :(得分:1)
您需要声明一个字段(属于某个类的特定实例的变量)来保存该对象的每条信息。 pickupSound
上的GuitarPickup
字段就是一个例子。
在Java中使用与getter和setter相同的名称是强有力的约定。例如,对于volume
,代码的相关部分将如下所示:
public class GuitarAmpSound {
private int sound = 0;
public void setSound(int sound) {
this.sound = sound; // "this.sound" means the sound field, not the parameter
}
public int getSound() {
return sound; // or this.sound
}
}
如果您要为for
循环实施必要的代码,那么您的GuitarString
类需要一个名为GuitarAmpSound
的{{1}}字段以及相应的getter和setter
请注意,sound
循环中的条件存在许多问题。 Java中的数组是从零开始的(因此6弦吉他上的字符串将从0到5),你不应该在循环中硬编码数组大小,而应该使用for
。最后,如果您只想检索数组(或集合)中的每个元素,Java有一个更方便的语法:
strings.length
答案 1 :(得分:1)
您的代码毫无意义,请用此替换GuitarAmp类:
public class GuitarAmp {
//This is what I want to get from this class
private GuitarAmpSound sound;
public GuitarAmp() {
sound = new GuitarAmpSound();
sound.setVolume(64);
sound.setDistortSetting(GuitarAmpSound.JAZZ);
}
public void changeVolume(int newVolume){
sound.setVolume(newVolume);
}
public GuitarAmpSound getSound() {
return sound;
}
public void setSound(Sound sound) {
this.sound = sound;
}
}
获取并设置规则很简单:
public YourClassName getYourObjectName() {
return yourObjectName;
}
public void setYourObjectName(YourClassName yourObjectName) {
this.yourObjectName = yourObjectName;
}
答案 2 :(得分:0)
真的很复杂,了解你真正想要的东西。看看有些变化......但是 我认为你需要重新构建对象。你想干什么?你能更好地解释一下吗?
public class GuitarAmp {
//This is what I want to get from this class
public GuitarAmpSound sound;
--> the sound you pass before call the constructor
sound.setVoolume(x);
sound.setDistortSetting(Y)
so you pass the object sound with the attributes full of information
public GuitarAmp(GuitarAmpSound sound){
this.sound = sound;
}
public void changeVolume(int newVolume){
this.sound.setVolume(newVolume);
}
}
这是皮卡类。
公共类GuitarPickup {
public GuitarAmpSound pickupSound;
public void Connect(GuitarString strings[], GuitarAmp amp)
{
pickupSound = new GuitarAmpSound();
//This is where I need to set it
for(int i = 0; i<strings.length; i++)
{
amp.setSound(strings[i].getSound());
}
}
}
答案 3 :(得分:0)
从概念上讲,为每个GuitarString保存相同的Sound值几乎没有意义。