对于我的计算机科学课,我需要使用IntegerList.java创建一个完成以下操作的程序:
将此功能添加到IntegerList类。您需要添加一个increaseSize方法和实例变量来保存 列表中当前的整数数和数组的当前大小。由于您无法将任何元素添加到列表中, 你不需要再调用increaseSize。
将一个方法void addElement(int newVal)添加到IntegerList类,该类将一个元素添加到列表中。在。。。之初 addElement,检查数组是否已满。如果是这样,请在执行任何其他操作之前调用increaseSize。
将一个方法void removeFirst(int newVal)添加到IntegerList类,该类从列表中删除第一次出现的值。如果 该值不会出现在列表中,它应该什么也不做(但这不是错误)。删除项目不应更改大小 数组,但请注意,数组值确实需要保持连续,因此当您删除值时,您将不得不移位 之后的一切都填满了它的空间。还记得减少跟踪元素数量的变量。
将方法removeAll(int newVal)添加到IntegerList类,该类从列表中删除所有出现的值。如果值 没有出现在列表中,它应该什么也不做(但这不是一个错误)。在IntegerListTest中向菜单添加一个选项以测试新方法。
我已经完成了除 4号之外的所有事情,我坚持了下去。我不知道如何从列表中删除所有出现的值。这是我的程序其余部分的代码。
整数列表
public class IntegerList
{
private int count;
private double totalInt;
int[] list; //values in the list
//-------------------------------------------------------
//create a list of the given size
//-------------------------------------------------------
public IntegerList(int size)
{
list = new int[size];
count = 0;
}
//-------------------------------------------------------
//fill array with integers between 1 and 100, inclusive
//-------------------------------------------------------
public void randomize()
{
for (int i = 0; i < list.length; i++)
list[i] = (int)(Math.random() * 100) + 1;
}
//-------------------------------------------------------
//print array elements with indices
//-------------------------------------------------------
public void print()
{
for (int i = 0; i < count; i++)
System.out.println(i + ":\t" + list[i]);
}
public void increaseSize()//int size???
{
int[] temp = new int[list.length * 2];
for (int i = 0; i < list.length; i++)
temp[i] = list[i];
list = temp;
}
public void addElement(int newVal)
{
if (count == list.length)
increaseSize();
list[count] = newVal;
count++;
}
public void removeFirst(int newVal2)
{
int index = -1;
for (int i = 0; i < count; i++)
{
index = i;
if (index != -1) {
// this code handles after found case
if (i == count-1)
{
// zero-out last element
list[i] = 0;
count--;
}
else
{
// shift value
list[i] = list[i+1];
}
}
}
}
public void removeAll(int newVal)
{
//This is the part I'm stuck on
}
}
IntegerListTest
import java.util.Scanner;
public class IntegerListTest
{
static IntegerList list = new IntegerList(10);
static Scanner scan = new Scanner(System.in);
//-------------------------------------------------------
// Create a list, then repeatedly print the menu and do what the
// user asks until they quit
//-------------------------------------------------------
public static void main(String[] args)
{
printMenu();
int choice = scan.nextInt();
while (choice != 0)
{
dispatch(choice);
printMenu();
choice = scan.nextInt();
}
}
//--------------------------------------
// Do what the menu item calls for
//--------------------------------------
public static void dispatch(int choice)
{
int loc;
switch(choice)
{
case 0:
System.out.println("Bye!");
break;
case 1:
System.out.println("How big should the list be?");
int size = scan.nextInt();
list = new IntegerList(size);
list.randomize();
break;
case 2:
list.print();
break;
case 3:
System.out.println("What number would you like to add?");
int newVal = scan.nextInt();
list.addElement(newVal);
break;
case 4:
System.out.println("What number do you want to remove? "
+ "(Removes first occurance.)");
int newVal2 = scan.nextInt();
list.removeFirst(newVal2);
case 5: //This is the part I am stuck on
System.out.println("What number do you wish to remove?"
+ "(Removes all occurances.)");
default:
System.out.println("Sorry, invalid choice");
}
}
//----------------------------
// Print the user's choices
//----------------------------
public static void printMenu()
{
System.out.println("\n Menu ");
System.out.println(" ====");
System.out.println("0: Quit");
System.out.println("1: Create a new list (** do this first!! **)");
System.out.println("2: Print the list");
System.out.println("3: Add element to the list");
System.out.println("4: Remove a value from the list");
System.out.println("5: Remove all occurrences of a value from the list");
System.out.print("\nEnter your choice: ");
}
}
答案 0 :(得分:1)
我会使用您已编写的代码并稍作修改。我几乎从不写一个返回类型为void的方法。我想知道我的方法是否成功。在调试或测试(JUnit)时,为removeFirst()返回一个布尔值会派上用场。只是因为该方法现在返回一个布尔值并不意味着您必须使用它,您仍然可以使用与您现在在代码中相同的方式调用该方法
list.removeFirst(newVal2);
您只需要修改方法removeFirst()以返回布尔值而不是void。
boolean removeFirst(int valToDelete) -
//True - found the value you were looking for and successfully removed it from the list
//False - the value to delete doesn't exist in your list
然后剩下要做的就是在while循环中使用该方法,如此
boolean removeAll(int val)
{
boolean retVal = false;
do{
retVal = removeFirst(val);
}while(retVal);
return retVal;
}
对removeFirst()的这个简单修改允许在类中重新使用
作为一个例子,Java自己的remove()的ArrayList方法返回一个布尔值