Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在main中添加到数组?_Java_Arrays_Oop - Fatal编程技术网

Java 如何在main中添加到数组?

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

我已经创建了一个数组,我想从main控制它。我的代码运行,但我不知道如何从主类向数组添加整数。另外,由于每个ConcreteSubject都有自己的存储阵列,我将如何更改此设置以将它们全部存储在同一个阵列中

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)将是一个更好的对象分解。无法完全理解您的用例。您在扩展一个类的同时还持有同一个类的数组,这是不正确的继承用法。Name
AbstractSpy
表明它是一个
Abstract
类,但您正在创建一个对象。请详细说明您的用例。请注意,“ConcreteSubject”中的存储阵列“spies”声明为实例变量。这意味着每个“具体主题”都有自己的存储阵列,这可能不是您想要的。我知道,但我没有设计用例,这也是我感到困惑的原因。基本上,我正在尝试在ConcreteSubject中创建一个数组,可以在TestClass中添加该数组。它从参数中添加int,我知道我还没有这样做。我不知道该怎么做?
spies.addSpy(spies)这应该做什么?首先你需要清理你的类型:“TestClass”应该是“SpyTester”(比如说)。“ConcreteSubject”应该是“ConcreteSpy”。但这可能还不够:如果有一个间谍集合,拥有一个“间谍”类(用来容纳间谍)并为单个间谍拥有不同的类型(AbstractSpy和ConcreteSpy)将是一个更好的对象分解。无法完全理解您的用例。您在扩展一个类的同时还持有同一个类的数组,这是不正确的继承用法。Name
AbstractSpy
建议