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;
}
如果我是对或错的话,我会尝试解释一下我从数组中理解的内容,你们可以向我解释并帮助为我澄清一下吗?提前谢谢。
NotSimple[] objArray;
这声明了一个数组
objArray = new NotSimple[size];
这会创建并将数组的长度分配给objArray?
我的书写道,要声明一个数组,您需要执行以下操作:elementType[] arrayRefVar
。据我所知,NotSimple
不是int
double
等元素。但是它有效吗?我可以说任何一句话吗?
在网站和我的书中,它没有解释x(y);
的作用。例如initializeObj(objArray);
这是做什么的?
老师要我做一些事情,例如将数组a
中的每个Notsimple对象初始化为NotSimple()
,但如果我甚至不掌握基础知识就很难。你们能澄清1-3,以便我可以学习吗?
答案 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是一个你必须为这个作业自己创建的类。
您正在从系统输入读入,因此当程序运行时,您要求用户输入的内容将变为NotSimple对象数组的大小。
您要创建一个名为NotSimple的类,然后可以调用NotSimple [] arrayOfNotSimple。这与int [],String []等的工作方式相同。
您必须自己实现它,在我看来,您需要初始化数组中的NotSimple对象大小。这取决于你如何设置NotSimple类,它可以像[0] = new NotSimple()
答案 3 :(得分:1)
1&amp; 2 - NotSimple是在其他地方定义的类。您实际上是在创建一个NotSimple对象数组。
您正在根据用户输入分配阵列可容纳的最大元素数。
3 - initializeObj(objArray)使用您的数组作为参数调用initializeObj方法。
initializeObj方法将使用NotSimple对象填充该数组(基于名称和注释)
答案 4 :(得分:1)
1)NotSimple[] objArray
声明类型为objArray
的变量NotSimple[]
(NotSimple
s的数组)。还没有与objArray
相关联的数据 - 它是null
。 new NotSimple[size]
实际上创建了NotSimple
s的数组,尽管数组中的每个插槽都是null
(将其视为空)。 objArray =
之前将新创建的数组分配给objArray
变量。
2)类型可以是primitives(如int,double)或特定类的对象。 NotSimple
是一个可能在其他地方定义的类。所以不,你不能只是在那里说任何一个词,它必须是定义的东西。你的作业有一个相当人为的例子,所以我可以看出你为什么感到困惑。
3)我很确定你的书确定了x(y)
的作用。这是一个函数调用(技术上是方法调用,但现在你可以对它们进行相同的处理)。
如果您认为我的答案不明确,请发表评论。
答案 5 :(得分:1)
你是对的。它的作用是为size
指针分配空间,最初指向null
,你可以用objArray[5] = someObject;
之类的东西替换指向实际对象的指针。指针是你可能尚未涉及的主题,所以我很抱歉,如果这让它更加混乱。
NotSimple
是class。这是Java(以及一般的面向对象编程)的一个非常重要的部分,你的书肯定会花很多时间来概念,即使它还没有。 就像一个简单类型int
等,但更复杂。它可以包含多个值以及可以对这些字段起作用的方法。
这是调用方法的语法。在x(y);
的情况下,这意味着“使用参数x
调用名为y
的方法”。您也可以使用逗号分隔多个参数来调用方法,例如:nameOfTheMethod(parameterOne, parameterTwo, parameterThree)
。
你没有问过这件事,但如果有帮助的话:
NotSimple someObject = new NotSimple();
致电constructor。这是一个类的特殊方法,基本上创建一个新的NotSimple
对象并返回它。构造函数是特殊的,因为它们必须与new
关键字结合使用,它们与它们正在构建的类具有相同的名称,并且它们没有返回类型(尽管最后一点在您开始编写之前无关紧要自己的建设者)。