为什么我的排序功能做错了?
Why is my sort function doing the job incorectly?
显然,当我只对参数化对象进行排序时,它会完美地执行,但是当我添加没有数据的对象时,它就会变得疯狂。帮助。
顺便说一句,我希望按“Stanje na racunu”或英文“您的帐户余额”降序排列数据,它采用对象 class 中的“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))
- 佩塔尔·戈伊科维奇
- 马尔科·西索维奇
- 米洛伊科·马里维奇
- 无
- 无
- 无
编辑。
调试后(在两个 for 循环之间添加一个 println)我可以看到,在第一次“i”迭代后,结果是完美的,但是,循环继续进行,但开始做一些它不应该做的事情。我想这超出了我的知识范围,因为我想这是一些编译器“问题”。
你的循环逻辑不正确。为了进行正确的排序,内部循环 (j
) 必须从当前的 i+1
向上开始。相反,它每次都从 1 开始。当你只有3个元素时,你可能看不出问题。
基本上,它将已排序区域中的元素与未排序区域中的元素进行比较。
显然,当我只对参数化对象进行排序时,它会完美地执行,但是当我添加没有数据的对象时,它就会变得疯狂。帮助。
顺便说一句,我希望按“Stanje na racunu”或英文“您的帐户余额”降序排列数据,它采用对象 class 中的“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))
- 佩塔尔·戈伊科维奇
- 马尔科·西索维奇
- 米洛伊科·马里维奇
- 无
- 无
- 无
编辑。 调试后(在两个 for 循环之间添加一个 println)我可以看到,在第一次“i”迭代后,结果是完美的,但是,循环继续进行,但开始做一些它不应该做的事情。我想这超出了我的知识范围,因为我想这是一些编译器“问题”。
你的循环逻辑不正确。为了进行正确的排序,内部循环 (j
) 必须从当前的 i+1
向上开始。相反,它每次都从 1 开始。当你只有3个元素时,你可能看不出问题。
基本上,它将已排序区域中的元素与未排序区域中的元素进行比较。