[英]how does this work in arrays?
您好,我在編寫此代碼時遇到困難,我迷失了最后兩種方法。 這是一項學習練習(不是家庭作業),但我需要學習示例。 另外,我認為這在stackoverflow數據庫中也很有用。
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 (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 (values[i] == number) {
return true;
}
// Since this line is reached only if no values matched, you simply do...
return false;
}
由於您仍在學習,因此,我會再給您一些提示:-)
我會改變
if (index >= values.length)
至
if (index < 0 || index >= values.length)
您可以在這里和那里使用for-each循環。 例如,您可以編寫:
public long getTotal() { long sum = 0; for (int i : values) sum = sum + i; return sum; }
應如下所示:
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;
}
您也可以使用Arrays.binarySearch()方法來代替自己編寫。 二進制搜索將查找數字是否在數組中以及什么索引(當然必須對數組進行排序)。
其中一些方法可以簡化。
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;
}
第一種方法:
public boolean contains(int number)
{
for (int i=0; i<values.length; i++)
{
if (number == values[i])
{
return true;
}
}
return false;
}
第二種方法:為此,您必須維護一個名為current
的變量,該變量包含最近添加的元素的索引。
public void add(int number)
{
if(current == values.length - 1)
{
throw new RuntimeException("Array Overflow");
}
values[++current] = number;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.