当前位置: 首页 > 知识库问答 >
问题:

为什么我的排序功能不直接地做这项工作?

林德辉
2023-03-14

通常,当我只对参数化对象进行排序时,它会完美地预成型,但是当我添加没有数据的对象时,它就会发疯。帮助。

顺便说一句,我想要按降序排序的数据,由“Stanje na racunu”排序,或者用英语“你的账户余额”排序,它接受对象类中的“stanje”变量并对其进行比较。我将再次重复。当tr1、tr2和tr3不包括在内时,这是完美的。帮助

    public class Glavna {
    
    public static void sort(TekuciRacun[] racuni) {
        TekuciRacun heljp = new TekuciRacun();
        
        for ( int i = 0; i < racuni.length - 1; i++)
            for ( int j = 1; j < racuni.length; j++)
                if ( racuni[i].getStanje() > racuni[j].getStanje() ) {
                    heljp = racuni[i];
                    racuni[i] = racuni[j];
                    racuni[j] = heljp;
                }
        
        for ( int i = 0; i < racuni.length; i++)
            System.out.println("\n" + racuni[i].toString());
    } 

    public static void main(String[] args) {

        TekuciRacun ptr1 = new TekuciRacun("Marko Sisovic", 29381024, 20000, 15000, 0, -10000);
        TekuciRacun ptr2 = new TekuciRacun("Petar Gojkovic", 12341234, 25000, 10000, 5000, -15000);
        TekuciRacun ptr3 = new TekuciRacun("Milojko Marivic", 23455423, 30000, 20000, 15000, -30000);
        
        TekuciRacun tr1 = new TekuciRacun();
        TekuciRacun tr2 = new TekuciRacun();
        TekuciRacun tr3 = new TekuciRacun();
        
        TekuciRacun[] racuni = { ptr1, ptr2, ptr3, tr1, tr2, tr3};
        
        sort(racuni);
    }
}

结果如下。

Ime i prezime vlasnika: Milojko Marivic
Broj racuna: 23455423
Stanje na racunu: -5000 dinara <====this is the data that's used for sorting
Dozvoljen minus: -30000 dinara

Ime i prezime vlasnika: Petar Gojkovic
Broj racuna: 12341234
Stanje na racunu: 10000 dinara <====
Dozvoljen minus: -15000 dinara

Ime i prezime vlasnika: Marko Sisovic
Broj racuna: 29381024
Stanje na racunu: 5000 dinara <====
Dozvoljen minus: -10000 dinara

Ime i prezime vlasnika: null
Broj racuna: 0
Stanje na racunu: 0 dinara 
Dozvoljen minus: 0 dinara

Ime i prezime vlasnika: null
Broj racuna: 0
Stanje na racunu: 0 dinara 
Dozvoljen minus: 0 dinara

Ime i prezime vlasnika: null
Broj racuna: 0
Stanje na racunu: 0 dinara 
Dozvoljen minus: 0 dinara

    public class TekuciRacun implements IRacun{
    private String vlasnik;
    private int brojRacuna;
    private int uplate;
    private int isplate;
    private int kredit;
    private int dozvoljenMinus;
    private int stanje = 0;
    
    TekuciRacun(){
        
    }
    
    TekuciRacun (String vlasnik, int brojRacuna, int uplate, int isplate, int kredit, int dozvoljenMinus){
        super();
        this.vlasnik = vlasnik;
        this.brojRacuna = brojRacuna;
        this.uplate = uplate;
        this.isplate = isplate;
        this.kredit = kredit;
        this.dozvoljenMinus = dozvoljenMinus;
        
        this.stanje = stanje(uplate, isplate, kredit);
    }
    
    @Override
    public int stanje(int uplate, int isplate, int kredit) {
        return stanje = uplate - isplate - kredit;
    }
    
    @Override
    public String toString() {
        return "Ime i prezime vlasnika: " + vlasnik 
                + "\nBroj racuna: " + brojRacuna
                + "\nStanje na racunu: " + stanje(uplate, isplate, kredit)
                + " dinara \nDozvoljen minus: " + dozvoljenMinus
                + " dinara\nKredit: " + kredit;
    }

    public String getVlasnik() {
        return vlasnik;
    }

    public int getBrojRacuna() {
        return brojRacuna;
    }

    public int getUplate() {
        return uplate;
    }

    public int getIsplate() {
        return isplate;
    }

    public int getKredit() {
        return kredit;
    }

    public int getDozvoljenMinus() {
        return dozvoljenMinus;
    }

    public int getStanje() {
        return stanje;
    }

    public void setVlasnik(String vlasnik) {
        this.vlasnik = vlasnik;
    }

    public void setBrojRacuna(int brojRacuna) {
        this.brojRacuna = brojRacuna;
    }

    public void setUplate(int uplate) {
        this.uplate = uplate;
    }

    public void setIsplate(int isplate) {
        this.isplate = isplate;
    }

    public void setKredit(int kredit) {
        this.kredit = kredit;
    }

    public void setDozvoljenMinus(int dozvoljenMinus) {
        this.dozvoljenMinus = dozvoljenMinus;
    }

    public void setStanje(int stanje) {
        this.stanje = stanje;
    }
    
    
    
}

所需的输出是(不是完整的,只有名称(vlasnik))

  1. Petar Gojkovic
  2. 马尔科·西索维奇
  3. Milojko Marivic
  4. null
  5. null
  6. null

编辑在调试之后(在两个for循环之间添加println),我可以看到在第一次“i”迭代之后,结果是完美的,但是,循环继续进行,就像它应该做的那样,但是开始做它不应该做的事情。我猜这超出了我的知识范围,因为我猜这是某个编译器的“问题”。

共有1个答案

柯瀚海
2023-03-14

你的循环逻辑不正确。为了进行适当的排序,内部循环(j)必须从当前的i1开始。相反,每次从1开始。当你只有3个元素时,你可能看不到问题所在。

基本上,它将已排序区域中的元素与未排序区域中的元素进行比较。

 类似资料:
  • 我从课本上抄了一个例子,但它拒绝编译。我是不是在什么地方打错了?出于某种原因,在客户端代码中,collections.sort(words)不允许程序编译。任何帮助都很感激。代码复制自Stuart Reges和Marty Stepp的“构建Java程序”第二版。我正试图通过复制来理解它。 该程序应该将一个CalendarDate对象装入一个ArrayList中。通过实现CalendarDate的可

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严

  • 问题内容: 这段代码仅显示折叠的框架。我希望pack(); 方法调用会确定我的.jpg图片周围的框架大小,对吗? 我已经可以听到第一个问题,是的,该图像与我的项目包文件夹位于同一文件夹中。 我正在使用Eclipse IDE。 我还添加了println(); 语句以查看Image引用返回的内容,并返回“ TestImage.jpg”。我以为它会返回内存中图像的地址。 我整个上午都在阅读该论坛,如果没

  • 问题内容: 我知道React教程和文档毫无疑问地警告说,状态不应该直接变异,所有事情都应该通过。 我想了解一下,为什么我不能直接更改状态,然后(在同一函数中)仅调用来触发它。 例如:下面的代码似乎正常工作: 我全都遵循以下约定,但我想进一步加深对ReactJS实际工作方式的理解,以及可能出现问题的地方或上述代码的优缺点。 文档下的注释基本上标识了两个陷阱: 如果您直接更改状态,然后再调用它,则可能

  • 我有这个项目。然后我做以下步骤: 转到 预期结果:错误消息(在浏览器中呈现) 白标签错误页 此应用程序没有 /error的显式映射,因此您将此视为一种退回。星期二八月27 16:59:23CEST 2019有一个意外的错误(类型=未找到,状态=404)。没有可用的消息 如何更改附加的代码,使文件索引代替此错误。是否呈现xhtml? 更新1:如果我去,我得到这个错误: 白标签错误页此应用程序没有/E

  • 在我的项目中,电影和演员、电影和类别之间有着多对多的关系。当我尝试创建一部电影,然后尝试使用Select2添加演员和类别时,它不会列出可用的选项(输入字段看起来是灰色的,好像它们被锁定了)。我查看脚本是否正在加载,它们是否正在加载。这是我的密码。