一道简单的有关数组的Java程序题,请高手前辈们帮忙查看一下代码,谢谢!
题目:编写一个工具类,该工具类内包含一个数组属性,可以调用该工具类的add()方法向该工具类中的数组里添加元素,添加的元素可以是任意类型,调用get(下标)方法可以取出某...
题目:编写一个工具类,该工具类内包含一个数组属性,可以调用该工具类的add()方法向该工具类中的数组里添加元素,添加的元素可以是任意类型,调用get(下标)方法可以取出某个元素,调用size方法可以返回已添加的元素数目。以下是我的代码:
import java.util.Scanner;
public class Tool
{
private int size;
private Object[] array=new Object[3];
public boolean add(Object element) {
//ensureCapacity(size+1);
this.array[this.size++]=element;
return true;}
/* public void ensureCapacity(int minCapacity)
{int oldCapacity = array.length;
if (minCapacity > oldCapacity){Object oldData[] = array;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
array = new Object[newCapacity];
System.arraycopy(oldData, 0, array, 0, size);}} */
//以上注释中代码是Java中ArrayList类的自动变长机制
public void get(int number) {
for (int i=0;i<size;i++)
{
if (number==size)
array[number]=array[size];
}
System.out.println("您取出的元素为:"+array[number]);
}
public void size() {
System.out.println("您已添加"+size+"个元素");
}
public static void main(String[] args)
{
Tool a=new Tool();
String confirm="Y";
boolean flag=true;
Scanner input=new Scanner(System.in);
while(flag) {
System.out.print("请输入您要添加的元素:");
a.add(input.next());
System.out.print("请问您还要继续输入吗?继续输入请按Y,返回菜单请按任意键");
if (confirm==input.next()) flag=true;
else flag=false;}
System.out.println("请输入您要取出的元素序号:");
a.get(input.nextInt());
a.size();
}
}
以上就是我的代码,我现在代码中的数组长度是定死的,但是我想要实现数组长度是动态的,也就是达到ArrayList类的功能,整道题目就是做一个简易的ArrayList类;以上代码编译没有错误,但是运行不能达到我想要的效果以及题目的效果。请各位高手前辈予以指教,不甚感激! 展开
import java.util.Scanner;
public class Tool
{
private int size;
private Object[] array=new Object[3];
public boolean add(Object element) {
//ensureCapacity(size+1);
this.array[this.size++]=element;
return true;}
/* public void ensureCapacity(int minCapacity)
{int oldCapacity = array.length;
if (minCapacity > oldCapacity){Object oldData[] = array;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
array = new Object[newCapacity];
System.arraycopy(oldData, 0, array, 0, size);}} */
//以上注释中代码是Java中ArrayList类的自动变长机制
public void get(int number) {
for (int i=0;i<size;i++)
{
if (number==size)
array[number]=array[size];
}
System.out.println("您取出的元素为:"+array[number]);
}
public void size() {
System.out.println("您已添加"+size+"个元素");
}
public static void main(String[] args)
{
Tool a=new Tool();
String confirm="Y";
boolean flag=true;
Scanner input=new Scanner(System.in);
while(flag) {
System.out.print("请输入您要添加的元素:");
a.add(input.next());
System.out.print("请问您还要继续输入吗?继续输入请按Y,返回菜单请按任意键");
if (confirm==input.next()) flag=true;
else flag=false;}
System.out.println("请输入您要取出的元素序号:");
a.get(input.nextInt());
a.size();
}
}
以上就是我的代码,我现在代码中的数组长度是定死的,但是我想要实现数组长度是动态的,也就是达到ArrayList类的功能,整道题目就是做一个简易的ArrayList类;以上代码编译没有错误,但是运行不能达到我想要的效果以及题目的效果。请各位高手前辈予以指教,不甚感激! 展开
2个回答
展开全部
动态的过程就是在添加的时候判定数组是否已满,满则创建新的更长的数组替换原有的,并将原有的数据复制进新的数组
import java.util.*;
public class Tool {
private int size;
private Object[] array;
private final int DEFAULT_LENGTH = 10;
private final int GROWING_LENGTH = 5;
public Tool() {
size = 0;
array = new Object[DEFAULT_LENGTH];
}
public void add(Object element) {
ensureCapacity();
this.array[this.size++] = element;
}
public Object get(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("数组索引错误:" + index);
}
return this.array[index];
}
public int size() {
return this.size;
}
private void ensureCapacity() {
if (size == array.length) {
Object[] longerArray = new Object[size + GROWING_LENGTH];
System.arraycopy(array, 0, longerArray, 0, size);
this.array = longerArray;
}
}
@Override
public String toString() {
return Arrays.toString(array);
}
public static void main(String[] args) {
Tool tool = new Tool();
//填入5个字符串
for (int i = 0; i < 5; i++) {
tool.add("element " + i);
}
//填入5个数字
for (int i = 0; i < 5; i++) {
tool.add(i);
}
//输出
System.out.println(tool);
System.out.println(tool.size());
//继续填入
for (int i = 0; i < 5; i++) {
tool.add(new Date());
}
//输出
System.out.println(tool);
System.out.println(tool.get(12));
}
}
import java.util.*;
public class Tool {
private int size;
private Object[] array;
private final int DEFAULT_LENGTH = 10;
private final int GROWING_LENGTH = 5;
public Tool() {
size = 0;
array = new Object[DEFAULT_LENGTH];
}
public void add(Object element) {
ensureCapacity();
this.array[this.size++] = element;
}
public Object get(int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("数组索引错误:" + index);
}
return this.array[index];
}
public int size() {
return this.size;
}
private void ensureCapacity() {
if (size == array.length) {
Object[] longerArray = new Object[size + GROWING_LENGTH];
System.arraycopy(array, 0, longerArray, 0, size);
this.array = longerArray;
}
}
@Override
public String toString() {
return Arrays.toString(array);
}
public static void main(String[] args) {
Tool tool = new Tool();
//填入5个字符串
for (int i = 0; i < 5; i++) {
tool.add("element " + i);
}
//填入5个数字
for (int i = 0; i < 5; i++) {
tool.add(i);
}
//输出
System.out.println(tool);
System.out.println(tool.size());
//继续填入
for (int i = 0; i < 5; i++) {
tool.add(new Date());
}
//输出
System.out.println(tool);
System.out.println(tool.get(12));
}
}
追问
谢谢前辈,前辈的代码我已经研读过一遍了,我有一点小小问题还想请教一下1、主程序中可不可以字符串和数字穿插输入?2、主程序中 tool.add(new Date());中方的new Date()是什么?3、为什么会用到@Override,是为了确保什么吗?4、程序中定义了一个常量GROW_LENGTH=5,是不是每次超出长度以后,就增加5个长度?
追答
1、随便插入任何对象都可以,对象的种类,顺序都随意,因为他们都是Object的子类
2、这个就是随便插入对象的演示,为了方便使用了日期类
3、@Override保证你在覆盖方法过程中不会出现拼写等等的错误(如果有的话,编译期会提示)
4、是的,你可以自己改变这个值
展开全部
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Tool
{
private int size;
private Object[] array=new Object[3];
public boolean add(Object element) {
//ensureCapacity(size+1);
this.array[this.size++]=element;
return true;}
/* public void ensureCapacity(int minCapacity)
{int oldCapacity = array.length;
if (minCapacity > oldCapacity){Object oldData[] = array;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
array = new Object[newCapacity];
System.arraycopy(oldData, 0, array, 0, size);}} */
//以上注释中代码是Java中ArrayList类的自动变长机制
public void get(int number) {
for (int i=0;i<size;i++)
{
if (number==size)
array[number]=array[size];
}
System.out.println("您取出的元素为:"+array[number]);
}
public void size() {
System.out.println("您已添加"+size+"个元素");
}
public static void main(String[] args)
{
Tool a=new Tool();
String confirm="Y";
boolean flag=true;
Scanner input=new Scanner(System.in);
while(flag) {
System.out.print("请输入您要添加的元素:");
a.add(input.next());
System.out.print("请问您还要继续输入吗?继续输入请按Y,返回菜单请按任意键");
if (confirm==input.next()) flag=true;
else flag=false;}
System.out.println("请输入您要取出的元素序号:");
a.get(input.nextInt());
a.size();
}
}
import java.util.List;
import java.util.ArrayList;
public class Tool
{
private int size;
private Object[] array=new Object[3];
public boolean add(Object element) {
//ensureCapacity(size+1);
this.array[this.size++]=element;
return true;}
/* public void ensureCapacity(int minCapacity)
{int oldCapacity = array.length;
if (minCapacity > oldCapacity){Object oldData[] = array;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
array = new Object[newCapacity];
System.arraycopy(oldData, 0, array, 0, size);}} */
//以上注释中代码是Java中ArrayList类的自动变长机制
public void get(int number) {
for (int i=0;i<size;i++)
{
if (number==size)
array[number]=array[size];
}
System.out.println("您取出的元素为:"+array[number]);
}
public void size() {
System.out.println("您已添加"+size+"个元素");
}
public static void main(String[] args)
{
Tool a=new Tool();
String confirm="Y";
boolean flag=true;
Scanner input=new Scanner(System.in);
while(flag) {
System.out.print("请输入您要添加的元素:");
a.add(input.next());
System.out.print("请问您还要继续输入吗?继续输入请按Y,返回菜单请按任意键");
if (confirm==input.next()) flag=true;
else flag=false;}
System.out.println("请输入您要取出的元素序号:");
a.get(input.nextInt());
a.size();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询