我怎样才能将这些吉他标签条目放入算法中(从最低到 最高排名)。基于我在表单文本字段的该部分中设置的排名?这 程序在 JTextFields 中获取吉他音符,然后将它们保存到 GuitarTab[] 数组中。并且,有 按钮和其他用于浏览列表的内容(尽管此处未显示) (上一个Btn、下一个Btn、搜索Btn 等)。但是,我如何使用以下命令浏览列表 每个“GuitarTab 对象”从最低到最高排名排序,然后将它们放在其中 当我按 nextBtn 和 previosBtn 时顺序? 它有一个 JChecked Box 来启用算法,然后有一个搜索按钮来执行它们 出现。但是当我点击搜索按钮时什么也没有出现?
public class Guitars {
public String tabName;
public String eString;
public String bString;
public String gString;
public String dString;
public String aString;
public String lowEString;
public int rank;
public int getRank( ) {
return rank;
}
public void setRank(int r) {
rank = r;
};
public void saveBtnActionPerformed(ActionEvent e) {
int j;
int parsedString;
String rtrvdString;
numberEntries++ ;
currentTabEntry = 1;
int i;
if (numberEntries != 1) {
do {
if (tabNameFld.getText( ).compareTo(myTablatures[currentTabEntry - 1].tabName) < 0)
break;
currentTabEntry++;
}
while (currentTabEntry < numberEntries);
}
if (currentTabEntry != numberEntries) {
for (i = 0; i >= currentTabEntry + 1; i--) {
myTablatures[i - 1] = myTablatures[i - 2];
myTablatures[i - 2] = new GuitarTab( );
}
}
myTablatures[currentTabEntry - 1] = new GuitarTab( );
myTablatures[currentTabEntry - 1].tabName = tabNameFld.getText( );
myTablatures[currentTabEntry - 1].eString = eTxtFld.getText( );
myTablatures[currentTabEntry - 1].bString = bTxtFld.getText( );
myTablatures[currentTabEntry - 1].gString = gTxtFld.getText( );
myTablatures[currentTabEntry - 1].dString = dTxtFld.getText( );
myTablatures[currentTabEntry - 1].aString = aTxtFld.getText( );
myTablatures[currentTabEntry - 1].lowEString = lowETxtFld.getText( );
try {
rtrvdString = rankFld.getText( );
parsedString = Integer.valueOf(rtrvdString);
gtrTab.setRank(parsedString);
myTablatures[currentTabEntry - 1].rank = parsedString;
}
catch (NumberFormatException ex) {
ex.printStackTrace( );
}
//Present Currenty Entry
shwEntry(currentTabEntry);
}
//Sort Entries Based On Rank From Smallest Rank to Greater
public void sortRnkLwToHi(GuitarTab[ ] myTablatures) {
int a;
int b;
int i;
myTablatures = TabEntryWn.myTablatures;
GuitarTab tab;
int hiSubscript = myTablatures.length - 1;
for (a = 0; a < hiSubscript; a++) {
for (b = 0; b < hiSubscript; b++);
if (myTablatures[ b ].rank > myTablatures[b + 1].rank) {
tab = myTablatures[ b ];
myTablatures[ b ] = myTablatures[b + 1];
myTablatures[b + 1] = tab;
try {
currentTabEntry ++;
shwEntry(currentTabEntry);
}
catch (Exception ex) {
System.out.println("Error");
}
}
}
}
利用
Arrays.sort(T[] a, Comparator<? super T> c)
。这允许您根据需要通过比较对象来定义排序顺序。
例如...
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
List<Integer> ranks = new ArrayList<>(Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
Collections.shuffle(ranks);
Guitar[] guitars = new Guitar[10];
for (int index = 0; index < 10; index++) {
guitars[index] = new Guitar("Tab " + Integer.toString(index), ranks.remove(0));
}
System.out.println("Unsorted = " + Arrays.toString(guitars));
Arrays.sort(guitars, new Comparator<Guitar>() {
@Override
public int compare(Guitar o1, Guitar o2) {
return o1.getRank() - o2.getRank();
}
});
System.out.println("Sorted = " + Arrays.toString(guitars));
}
public class Guitar {
public String tabName;
public String eString;
public String bString;
public String gString;
public String dString;
public String aString;
public String lowEString;
public int rank;
public Guitar(String tabName, int rank) {
this.tabName = tabName;
this.rank = rank;
}
public int getRank() {
return rank;
}
public void setRank(int r) {
rank = r;
}
@Override
public String toString() {
return "[Guitar] " + tabName + " @ " + getRank();
}
}
}
它可以输出类似...的东西
Unsorted = [[Guitar] Tab 0 @ 10, [Guitar] Tab 1 @ 5, [Guitar] Tab 2 @ 2, [Guitar] Tab 3 @ 6, [Guitar] Tab 4 @ 4, [Guitar] Tab 5 @ 1, [Guitar] Tab 6 @ 3, [Guitar] Tab 7 @ 7, [Guitar] Tab 8 @ 9, [Guitar] Tab 9 @ 8]
Sorted = [[Guitar] Tab 5 @ 1, [Guitar] Tab 2 @ 2, [Guitar] Tab 6 @ 3, [Guitar] Tab 4 @ 4, [Guitar] Tab 1 @ 5, [Guitar] Tab 3 @ 6, [Guitar] Tab 7 @ 7, [Guitar] Tab 9 @ 8, [Guitar] Tab 8 @ 9, [Guitar] Tab 0 @ 10]
参见:
了解更多详情。
您可能还想看看如何使用CardLayout
为什么不直接在
类上实现Comparable
呢?Guitar
因为这会让你看到一个单一的用例。如果你想根据名字排序怎么办?还是标签比例?或者其他一些属性?就我个人而言,我发现创建自定义
Comparator
以及整体更好、更干净的解决方案,但这就是我