程序功能:根据存款余额,给账号排序。interface Comparable{
 int compareTo(Object o);
}
class BankAccount implements Comparable{
 private double balance; //余额
 private String acctNo; //账号
 BankAccount (String no,double bal){
 acctNo=no;
 balance=bal;
 }
 public String toString(){
 return "账号="+acctNo+"余额"+balance;
 }
 public int compareTo(Object arg0){
 BankAccount b=(BankAccount)arg0;
 if(balance<b.balance){
 return -1;
 }
 else if(balance==b.balance){
 return 0;
 }
 else{
 return 1;
 }
 }   
public static void sort(BankAccount[] b){ // 排序   
BankAccount temp,max;
 int m;
 for(int i=0;i<b.length-1;i++){
 max=b[i];
 m=i;
 for(int j=i+1;j<b.length;i++)
 if(max.compareTo(b[j])>0){
 max=b[j];
 m=j;
 }
 temp=b[i];
 b[i]=b[m];
 b[m]=temp;
 }
 }
 public static void print(BankAccount[] b){
 for(int i=0;i<b.length;i++){
 System.out.println(b[i]);
 }
 }
}
public class Test2 {
 public static void main(String[] args){
 BankAccount[] b=new BankAccount[5];
 b[0]=new BankAccount("101",756);
 b[1]=new BankAccount("102",123);
 b[2]=new BankAccount("103",566);
 b[3]=new BankAccount("104",987);
 b[4]=new BankAccount("105",566);
 BankAccount.print(b);
 BankAccount.sort(b);
 System.out.println("**********************************");
 BankAccount.print(b);
 }
}
但是打印出来却只是排序之前的账号信息,没有排序之后的。想用Eclipse 断点调试,但又不会调试。高手们给个指示啊!

解决方案 »

  1.   


     for(int j=i+1;j<b.length;i++) //<-- 应该是j++
     if(max.compareTo(b[j])>0){
     max=b[j];
     m=j;
     }
      

  2.   

    +1采用游标控制数组的时候,仔细查看需要移动的游标。建议:
    1. 学会dubug调试程序,这在你以后的开发中是很重要的。
    2. 对于适用循环的代码里,如果程序始终不能结束,你应该查看一下自己的循环,游标是否移动?如果游标移动了,看看移动的游标对不对或者你需要移动游标的条件是不是正确~~学习是一个积累的过程~
      

  3.   


    interface Comparable {
    int compareTo(Object o);
    }class BankAccount implements Comparable {
    private double balance; // 余额 private String acctNo; // 账号 BankAccount(String no, double bal) {
    acctNo = no;
    balance = bal;
    } public String toString() {
    return "账号=" + acctNo + "余额" + balance;
    } public int compareTo(Object arg0) {
    BankAccount b = (BankAccount) arg0;
    if (balance < b.balance) {
    return -1;
    } else if (balance == b.balance) {
    return 0;
    } else {
    return 1;
    }
    } public static void sort(BankAccount[] b) { // 排序
    BankAccount temp, max;
    int m;
    for (int i = 0; i < b.length - 1; i++) {
    max = b[i];
    m = i;
    for (int j = i + 1; j < b.length -1; j++)//死循环
    if (max.compareTo(b[j]) > 0) {
    max = b[j];
    m = j;
    }
    temp = b[i];
    b[i] = b[m];
    b[m] = temp;
    }
    } public static void print(BankAccount[] b) {
    for (int i = 0; i < b.length; i++) {
    System.out.println(b[i]);
    }
    }
    }public class Test2 {
    public static void main(String[] args) {
    BankAccount[] b = new BankAccount[5];
    b[0] = new BankAccount("101", 756);
    b[1] = new BankAccount("102", 123);
    b[2] = new BankAccount("103", 566);
    b[3] = new BankAccount("104", 987);
    b[4] = new BankAccount("105", 566);
    BankAccount.print(b);
    BankAccount.sort(b);
    System.out.println("**********************************");
    BankAccount.print(b);
    }
    }
      

  4.   


     for (int j = i + 1; j < b.length -1; j++)//死循环 这里应该是j < b.length 理解错了