我从java开始,我需要为我的第一个程序创建一个方法。
我要做的是:我创建逐个字符串,然后将它们保存在String []数组中。这些字符串具有以下结构:
String = word1 word2 word3 code;
然后,当我想要时,我可以列出他们在控制台上显示整个数组。而且,如果我愿意,我可以删除数组中的一个特定字符串。
为实现这一目标,我正在使用我为每个数组设置的代码。每次向数组添加一个String时都会生成此代码,因此此代码与字符串在数组中的位置匹配。
当我想删除一个String时,我必须将该字符串的代码传递给该方法。在这种情况下,代码与字符串的位置相同,所以当我传递代码时,实际上我传递的是位置。
我第一次删除一个字符串,这是有效的,但第二次失败是因为这个。让我们假设我们有:
String0 = word1 word2 word3 0
String1 = word4 word5 word6 1
String2 = word7 word8 word9 2
如果我删除了String1,现在数组被调整为2个字符串(0和1),所以当我添加一个新字符串时,它会将代码2重新设置为这个新字符串,所以我将:
String0 = word1 word2 word3 0
String2 = word7 word8 word9 2
String3 = word10 word11 word12 2
这一切都是因为将代码写入字符串,我使用数组中String的位置。 那么,以正确的方式获得此功能的最佳方式是什么?
这是我的代码:
我在main中以这种方式向数组添加一个字符串:
musicList.add(new Music(title, autor, format, code));
我以这种方式在控制台上列出数组:
System.out.println(musicList.toString());
我这样删除它:
musicList.delete(code);
方法add(),toString()和delete()是我在其他类中以这种方式定义的自定义方法:
public void add(Music m){
musicList[pos_counter] = m;
pos_counter++;
}
public void delete(int code){
Music[] tempMusic = new Music[musicList.length];
int index_1 = 0;
for (int i=0; i<musicList.length; i++){
if(i != code){
tempMusic[index_1] = musicList[i];
index_1++;
}
}
int index_2 = 0;
for (int i=0; i<tempMusic.length; i++){
musicList[index_2] = tempMusic[i];
index_2++;
}
pos_counter--;
}
toString()方法只是以String方式显示实例。
Thes Music []实例只调用其他类,其中定义了一个带有音乐列表元素的构造函数(这些是标题,autor,格式或类型和代码):
public Music(String title, String autor, String type, int code){
this.setTitle(title);
this.setAutor(autor);
this.setType(type);
this.setCode(code);
}
答案 0 :(得分:1)
首先,我建议使用ArrayList。但是我在你之前的问题中已经看到你不想使用它。因此,如果要使用数组,则代码存在问题。当您从数组中删除某些内容时,您需要更改数组中所有项目的代码,这些代码位于您要删除的项目之后,或者代码与位置不匹配。
编辑:使用ArrayList执行此操作,您可以使用以下命令创建它:
ArrayList<Music> musicList = new ArrayList<Music>();
要添加和删除项目,只需:
musicList.add(new Music("string", "string", "string", musicList.size()));
// If you have the Music instance you want to remove, you can pass it as an argument
musicList.remove(musicItem);
// And if you only have the position, then
musicList.remove(position);
如果使用ArrayList,则不需要将位置存储在Music对象中,但如果由于某种原因需要,则只需使用我编写的size方法作为add函数的最后一个参数。
编辑2:为您添加到列表中的每个项目获取新代码,您可以尝试以下操作:
int max = 0;
for (Music item : musicList) {
if (item.getCode() > max) {
max = item.getCode();
}
}
int newCode = max++;
编辑3:在您解释的所有内容之后,我猜您真正想要的是地图。使用Map,您可以使用键存储项目,并使用此键检索值。你的案例中的关键是音乐项目的代码。这就是它的样子:
Map<Integer, Music> musicMap = new HashMap<Integer, Music>();
// To put a new item in the Map
int max = 0;
for (Integer mapCode : musicMap.keySet()) {
if (mapCode > max) {
max = mapCode;
}
}
int newCode = max++;
musicItem.setCode(newCode);
musicMap.put(newCode, musicItem);
// To remove an item by its value
musicMap.remove(code);
您可以找到有关地图界面here的更多信息。
最后编辑:迭代地图并将其输出打印到控制台,您只需执行以下操作:
for (Music item : musicMap.values()) {
System.out.println(item);
}
答案 1 :(得分:0)
考虑使用Java Collections
它已经为您实现了插入,删除和其他不错的操作。您可以创建一个“音乐”集合并对其进行操作。