Java 这在阵列中是如何工作的?
您好,我写这段代码有困难,我对最后两种方法感到迷茫。这是一个学习练习,不是家庭作业,但我需要学习的例子。 另外,我认为这在stackoverflow数据库中也很有用Java 这在阵列中是如何工作的?,java,arrays,methods,Java,Arrays,Methods,您好,我写这段代码有困难,我对最后两种方法感到迷茫。这是一个学习练习,不是家庭作业,但我需要学习的例子。 另外,我认为这在stackoverflow数据库中也很有用 public class NumberList { public int[] values; public NumberList() { values = new int[0]; } public NumberList(int[] a) { values = new int [a.length]; for (int
public class NumberList {
public int[] values;
public NumberList() {
values = new int[0];
}
public NumberList(int[] a) {
values = new int [a.length];
for (int i=0;i<a.length;i++)
values[i] = a[i];
}
public int getSize() {
return this.values.length;
}
public int getAt(int index) {
if (index>=values.length){
throw new IndexOutOfBoundsException ("Values of out of bounds");
}else{
return values[index];
}
}
public long getTotal() {
long sum = 0;
for (int i=0; i<values.length; i++) {
sum = sum + values[i];
}
return sum;
}
// need help here its a boolean that the number is in the array but if not its //false
public boolean contains(int number) {
for (int i=0; i<values.length; i++){
if (number <values.length+1){
return true;
}
//else
// return false;
// }
// this is an add method that confuses me and ask myself why since i added without it.
public void add(int number) {
number=0;
}
}
好的开始。您只需更改以下内容:
public boolean contains(int number) {
for (int i=0; i<values.length; i++) {
if (values[i] == number) {
return true;
}
// Since this line is reached only if no values matched, you simply do...
return false;
}
到
应该如下所示:
public boolean contains(int number) {
for (int i=0; i<values.length; i++){
//so the number was found
if (number==values[i]){
return true;
}
return false;
}
你也可以使用这个方法,而不是自己写一个。二进制搜索将查找数字是否在数组中,以及数组必须排序的索引。第一种方法:
public boolean contains(int number) {
for (int i=0; i<values.length; i++)
if (number==values[i]) return true;
return false;
}
public void add(int number) {
int[] tmp = new int[value.length+1];
for (int i=0; i<values.length; i++) tmp[i] = values[i];
tmp[tmp.length-1] = number;
values = tmp;
}
public boolean contains(int number)
{
for (int i=0; i<values.length; i++)
{
if (number == values[i])
{
return true;
}
}
return false;
}
其中一些方法可以简化
public NumberList(int[] a) {
values = a.clone();
}
public int getAt(int index) {
return values[index]; // throws ArrayIndexOutOfBoundException if out of bounds. It include the invalid index as well.
}
public long getTotal() {
long sum = 0;
for (int i: values) sum += i;
return sum;
}
public boolean contains(int number) {
for (int i: values)
if (number == i)
return true;
return false;
}
public void add(int num) {
int[] values2 = new int[values.length+1];
// arraycopy is typically faster than using a loop.
System.arraycopy(values,0,value2,0,values.length);
values2[values.length] = num;
values = values2;
}
你实际上没有问任何问题。问题是add方法吗?它应该做什么,向数组中添加一个新索引?你能给出一组输入以及它们的预期输出吗?你不需要检查数组边界,Java会为你做这件事,并抛出相同的异常,除非你想要你的消息而不是默认的。看看System.ArrayCopyActual,这似乎是重复的:你有什么建议吗?还是值得学习的好书?我上的是一所顶尖的计算机科学学校,这所学校非常艰苦,我正在尽我最大的努力去生存。我每天学习18个小时,对学习有任何帮助,我非常感激!这不是假设数组只包含递增的数字,每个数字从1到长度不等吗?例如,若数组为{1,3,5},您传入contains2,它将返回true,但实际上是false。我的错。更新了答案。如果该方法旨在检查数组是否包含该索引的值,该怎么办?在不了解更多代码的情况下,很难判断错误。
public boolean contains(int number) {
for (int i=0; i<values.length; i++)
if (number==values[i]) return true;
return false;
}
public void add(int number) {
int[] tmp = new int[value.length+1];
for (int i=0; i<values.length; i++) tmp[i] = values[i];
tmp[tmp.length-1] = number;
values = tmp;
}
public boolean contains(int number)
{
for (int i=0; i<values.length; i++)
{
if (number == values[i])
{
return true;
}
}
return false;
}
public void add(int number)
{
if(current == values.length - 1)
{
throw new RuntimeException("Array Overflow");
}
values[++current] = number;
}
public NumberList(int[] a) {
values = a.clone();
}
public int getAt(int index) {
return values[index]; // throws ArrayIndexOutOfBoundException if out of bounds. It include the invalid index as well.
}
public long getTotal() {
long sum = 0;
for (int i: values) sum += i;
return sum;
}
public boolean contains(int number) {
for (int i: values)
if (number == i)
return true;
return false;
}
public void add(int num) {
int[] values2 = new int[values.length+1];
// arraycopy is typically faster than using a loop.
System.arraycopy(values,0,value2,0,values.length);
values2[values.length] = num;
values = values2;
}