数组问题 - 这一行有什么作用?

时间:2010-10-02 02:26:49

标签: java arrays

        package javaapplication1;
        import java.io.*;
     public class Main {


    /**
     * @param args the command line arguments
     */
       public static void main(String[] args) throws IOException {
            NotSimple[] objArray;
               BufferedReader stdin = new BufferedReader(
                                   new InputStreamReader( System.in ) );
            System.out.println( "Enter a number of objects:" );

            int size;
            size = Integer.parseInt( stdin.readLine() );

            //Initialize objArray
            objArray = new NotSimple[size];

            //TODO: Implement following functions

            initializeObj(objArray);
            increaseData(objArray);
            printObjData(objArray);

            //TODO: Explain all outputs of the below function
            explainOutputs();
            return;
        }

      //TODO
      //initialize every Notsimple object in the array 'a'
      //to NotSimple()
      //Hint: using the for loop, assign a[i] = new NotSimple();
      static void initializeObj(NotSimple[] a)
       {


      //TODO: FILL ME
         }

      //TODO:
      //Increase the ‘data’ member of every NotSimple object
     //in the array ‘a’ by 1
     static void increaseData(NotSimple[] a) {
       //TODO: FILL ME
        }

     //TODO:
     //Print the data of every NotSimple object in the array ‘a’
     static void printObjData(NotSimple[] a) {
       //TODO: FILL ME
       }

     //TODO explain all the outputs 1a-1f
    static void explainOutputs() {
    NotSimple nsObj1 = new NotSimple();
       //1a
      System.out.println( "nsObj1.data is\t" + nsObj1.getData() );
      System.out.println( "nsObj1.str is \t" + nsObj1.getStr() );

    NotSimple nsObj2 = new NotSimple( 50,
                         "Another immutable string!" );
    //1b
    System.out.println( "nsObj2.data is\t" + nsObj2.getData() );
    System.out.println( "nsObj2.str is \t" + nsObj2.getStr() );

    nsObj2 = nsObj1;

    nsObj2.setData(10);
    nsObj1.setData(100);
    //1c
    System.out.println( "nsObj2.data is\t" + nsObj2.getData() );
    System.out.println( "nsObj2.str is \t" + nsObj2.getStr() );

    nsObj1 = new NotSimple();
    //1d
    System.out.println( "nsObj1.data is\t" + nsObj1.getData() );
    System.out.println( "nsObj1.str is \t" + nsObj1.getStr() );
    System.out.println( "nsObj2.data is\t" + nsObj2.getData() );
    System.out.println( "nsObj2.str is \t" + nsObj2.getStr() );

    nsObj2 = new NotSimple();
    //1e
    System.out.println( "nsObj2.data is\t" + nsObj2.getData() );
    System.out.println( "nsObj2.str is \t" + nsObj2.getStr() );

    nsObj2.setData(10);
    //1f
    System.out.println( "nsObj1.data is\t" + nsObj1.getData() );
    System.out.println( "nsObj1.str is \t" + nsObj1.getStr() );
    System.out.println( "nsObj2.data is\t" + nsObj2.getData() );
    System.out.println( "nsObj2.str is \t" + nsObj2.getStr() );
     }

     }


      class NotSimple
    {
    NotSimple()
      {
      data = 5;
       str = new String( "Initialized!" );
     }

    NotSimple( int i, String str1 )
    {
    data = i;
    str = str1;
    }

  void setData( int i )
    {
    data = i;

    return;
    }

  int getData()
     {
     return data;
    }

    void setStr( String str1)
     {
     str = str1;

       return;
     }

     String getStr()
   {
          return str;
   }

    private int data;
    private String str;
   }

如果我是对或错的话,我会尝试解释一下我从数组中理解的内容,你们可以向我解释并帮助为我澄清一下吗?提前谢谢。

  1. NotSimple[] objArray;这声明了一个数组 objArray = new NotSimple[size];这会创建并将数组的长度分配给objArray?

  2. 我的书写道,要声明一个数组,您需要执行以下操作:elementType[] arrayRefVar。据我所知,NotSimple不是int double等元素。但是它有效吗?我可以说任何一句话吗?

  3. 在网站和我的书中,它没有解释x(y);的作用。例如initializeObj(objArray);这是做什么的?

  4. 老师要我做一些事情,例如将数组a中的每个Notsimple对象初始化为NotSimple(),但如果我甚至不掌握基础知识就很难。你们能澄清1-3,以便我可以学习吗?

6 个答案:

答案 0 :(得分:6)

在网站和我的书中,它没有解释x(y);一样。

Java类有一种称为方法的东西。它有时也称为例程子例程函数。您发布的代码中的 main()是一种方法。

通常,方法是一组明确定义的代码,它执行单个任务:

<强> setBackgroundColor();

<强> clearTemperature();

<强> openValve();

因此,x()将是一种方法,一种(希望)特定的,明确定义的任务。

现在,x(y)表示“x()想要执行任务,但它必须执行某事,或者需要某事才能执行任务做它的任务“......”y“就是那个。

所以x(y)实际上意味着,“x做某事,而且它想做到或用y”

示例:

<强> calculateAverageTemperate(temperatureList);

附近的某处是计算平均温度的方法。要做到这一点,它可能会循环一个温度列表(在你查看代码或javadoc之前,你不会确切地知道它是什么。)

setCheese(“巴西海狸”);

setCheese()可能设置一个变量来告诉你午餐时吃的是什么。今天,它是巴西海狸奶酪。

<强> applyUpvote(1);

你投了这个答案!恭喜。在某处,Stack Overflow代码将为此答案的upvote计数添加一个。

当然还有更多的东西......

答案 1 :(得分:1)

如你所说,这一行创建一个项目数组。

objArray = new NotSimple[size];

但是数组中没有任何项目,它只是用于保存对一组新对象的引用的空间。您需要创建这些对象,为它们提供适当的信息并将它们放入数组中,在此函数中(换句话说,初始化数组)

initializeObj(objArray);

确保在调用increaseData时,数组的内容已准备就绪,可以调用它。

答案 2 :(得分:1)

在我看来,NotSimple是一个你必须为这个作业自己创建的类。

  1. 您正在从系统输入读入,因此当程序运行时,您要求用户输入的内容将变为NotSimple对象数组的大小。

  2. 您要创建一个名为NotSimple的类,然后可以调用NotSimple [] arrayOfNotSimple。这与int [],String []等的工作方式相同。

  3. 您必须自己实现它,在我看来,您需要初始化数组中的NotSimple对象大小。这取决于你如何设置NotSimple类,它可以像[0] = new NotSimple()

  4. 一样简单

答案 3 :(得分:1)

1&amp; 2 - NotSimple是在其他地方定义的类。您实际上是在创建一个NotSimple对象数组。

您正在根据用户输入分配阵列可容纳的最大元素数。

3 - initializeObj(objArray)使用您的数组作为参数调用initializeObj方法。

initializeObj方法将使用NotSimple对象填充该数组(基于名称和注释)

答案 4 :(得分:1)

1)NotSimple[] objArray声明类型为objArray的变量NotSimple[]NotSimple s的数组)。还没有与objArray相关联的数据 - 它是nullnew NotSimple[size]实际上创建了NotSimple s的数组,尽管数组中的每个插槽都是null(将其视为空)。 objArray =之前将新创建的数组分配给objArray变量。

2)类型可以是primitives(如int,double)或特定类的对象。 NotSimple是一个可能在其他地方定义的类。所以不,你不能只是在那里说任何一个词,它必须是定义的东西。你的作业有一个相当人为的例子,所以我可以看出你为什么感到困惑。

3)我很确定你的书确定了x(y)的作用。这是一个函数调用(技术上是方法调用,但现在你可以对它们进行相同的处理)。

如果您认为我的答案不明确,请发表评论。

答案 5 :(得分:1)

  1. 你是对的。它的作用是为size指针分配空间,最初指向null,你可以用objArray[5] = someObject;之类的东西替换指向实际对象的指针。指针是你可能尚未涉及的主题,所以我很抱歉,如果这让它更加混乱。

  2. NotSimpleclass。这是Java(以及一般的面向对象编程)的一个非常重要的部分,你的书肯定会花很多时间来概念,即使它还没有。 就像一个简单类型int等,但更复杂。它可以包含多个值以及可以对这些字段起作用的方法。

  3. 这是调用方法的语法。在x(y);的情况下,这意味着“使用参数x调用名为y的方法”。您也可以使用逗号分隔多个参数来调用方法,例如:nameOfTheMethod(parameterOne, parameterTwo, parameterThree)

  4. 你没有问过这件事,但如果有帮助的话:

    NotSimple someObject = new NotSimple();
    

    致电constructor。这是一个类的特殊方法,基本上创建一个新的NotSimple对象并返回它。构造函数是特殊的,因为它们必须与new关键字结合使用,它们与它们正在构建的类具有相同的名称,并且它们没有返回类型(尽管最后一点在您开始编写之前无关紧要自己的建设者)。