Java 如何在main中添加到数组?
我已经创建了一个数组,我想从main控制它。我的代码运行,但我不知道如何从主类向数组添加整数。另外,由于每个ConcreteSubject都有自己的存储阵列,我将如何更改此设置以将它们全部存储在同一个阵列中Java 如何在main中添加到数组?,java,arrays,oop,Java,Arrays,Oop,我已经创建了一个数组,我想从main控制它。我的代码运行,但我不知道如何从主类向数组添加整数。另外,由于每个ConcreteSubject都有自己的存储阵列,我将如何更改此设置以将它们全部存储在同一个阵列中 public class ConcreteSubject extends AbstractSpy { private AbstractSpy[] spies = new AbstractSpy[10]; private int i = 0; public void
public class ConcreteSubject extends AbstractSpy
{
private AbstractSpy[] spies = new AbstractSpy[10];
private int i = 0;
public void addSpy(AbstractSpy s) {
if (i < spies.length) {
spies[i] = s;
System.out.println("spy added at index " + i);
i++;
}
}
}
public class TestClass
{
public static void main(String[] args) {
ConcreteSubject cs = new ConcreteSubject();
AbstractSpy spies = new AbstractSpy() {
@Override
public void addSpy(AbstractSpy spies) {
}
};
cs.addSpy(cs);
spies.addSpy(spies);
}
}
公共类ConcreteSubject扩展AbstractSpy
{
私人AbstractSpy[]间谍=新AbstractSpy[10];
私有整数i=0;
公共无效addSpy(摘要Spy){
if(i
您的程序逻辑似乎有点问题。特别是这一点没有多大意义:
***AbstractSpy spies = new AbstractSpy() {
@Override
public void addSpy(AbstractSpy spies) {
}
};
cs.addSpy(cs);
***spies.addSpy(spies);
您正在做的是创建两个AbstractSpy实例,一个名为cs
,另一个名为spies
。在最后一行中,您正在向自身添加间谍
!那对你一点帮助都没有
请注意,AbstractSpy
是您的设置中最精细的单元-它不应该有一个addSpy()
方法和它自己的内部数组,它应该是添加到其他数组中的东西
下面是相同的代码,但有点干净:
public abstract class AbstractSpy { }
public class ConcreteSpy extends AbstractSpy { }
public class ConcreteSubject {
private AbstractSpy[] spies = new AbstractSpy[10];
private int i = 0;
public void addSpy(AbstractSpy spy) {
if (i < spies.length)
{
spies[i] = spy;
System.out.println("spy added at index " + i);
i++;
}
}
}
public class TestClass {
public static void main(String[] args) {
ConcreteSubject cs = new ConcreteSubject();
AbstractSpy spy = new ConcreteSpy();
cs.addSpy(spy);
}
}
公共抽象类AbstractSpy{}
公共类ConcreteSpy扩展AbstractSpy{}
公共课{
私人AbstractSpy[]间谍=新AbstractSpy[10];
私有整数i=0;
公共无效addSpy(AbstractSpy spy){
if(i
这里最大的区别在于
ConcreteSpy
是AbstractSpy
的一个实现,您可以将它添加到ConcreteSubject
的间谍数组中。我想您可能已经被Java的坚持弄糊涂了,Java坚持认为除非您提供一个从抽象类继承的匿名类,否则您不能自己创建抽象类的实例。您的程序逻辑似乎有点问题。特别是这一点没有多大意义:
***AbstractSpy spies = new AbstractSpy() {
@Override
public void addSpy(AbstractSpy spies) {
}
};
cs.addSpy(cs);
***spies.addSpy(spies);
您正在做的是创建两个AbstractSpy实例,一个名为cs
,另一个名为spies
。在最后一行中,您正在向自身添加间谍
!那对你一点帮助都没有
请注意,AbstractSpy
是您的设置中最精细的单元-它不应该有一个addSpy()
方法和它自己的内部数组,它应该是添加到其他数组中的东西
下面是相同的代码,但有点干净:
public abstract class AbstractSpy { }
public class ConcreteSpy extends AbstractSpy { }
public class ConcreteSubject {
private AbstractSpy[] spies = new AbstractSpy[10];
private int i = 0;
public void addSpy(AbstractSpy spy) {
if (i < spies.length)
{
spies[i] = spy;
System.out.println("spy added at index " + i);
i++;
}
}
}
public class TestClass {
public static void main(String[] args) {
ConcreteSubject cs = new ConcreteSubject();
AbstractSpy spy = new ConcreteSpy();
cs.addSpy(spy);
}
}
公共抽象类AbstractSpy{}
公共类ConcreteSpy扩展AbstractSpy{}
公共课{
私人AbstractSpy[]间谍=新AbstractSpy[10];
私有整数i=0;
公共无效addSpy(AbstractSpy spy){
if(i
这里最大的区别在于
ConcreteSpy
是AbstractSpy
的一个实现,您可以将它添加到ConcreteSubject
的间谍数组中。我想您可能已经被Java的坚持弄糊涂了,Java坚持认为除非提供从抽象类继承的匿名类,否则您不能自己创建抽象类的实例。spies.addSpy(spies)代码>这应该做什么?首先你需要清理你的类型:“TestClass”应该是“SpyTester”(比如说)。“ConcreteSubject”应该是“ConcreteSpy”。但这可能还不够:如果有一个间谍集合,拥有一个“间谍”类(用来容纳间谍)并为单个间谍拥有不同的类型(AbstractSpy和ConcreteSpy)将是一个更好的对象分解。无法完全理解您的用例。您在扩展一个类的同时还持有同一个类的数组,这是不正确的继承用法。NameAbstractSpy
表明它是一个Abstract
类,但您正在创建一个对象。请详细说明您的用例。请注意,“ConcreteSubject”中的存储阵列“spies”声明为实例变量。这意味着每个“具体主题”都有自己的存储阵列,这可能不是您想要的。我知道,但我没有设计用例,这也是我感到困惑的原因。基本上,我正在尝试在ConcreteSubject中创建一个数组,可以在TestClass中添加该数组。它从参数中添加int,我知道我还没有这样做。我不知道该怎么做?spies.addSpy(spies)代码>这应该做什么?首先你需要清理你的类型:“TestClass”应该是“SpyTester”(比如说)。“ConcreteSubject”应该是“ConcreteSpy”。但这可能还不够:如果有一个间谍集合,拥有一个“间谍”类(用来容纳间谍)并为单个间谍拥有不同的类型(AbstractSpy和ConcreteSpy)将是一个更好的对象分解。无法完全理解您的用例。您在扩展一个类的同时还持有同一个类的数组,这是不正确的继承用法。NameAbstractSpy
建议