Java中按数组排序列表的实现问题
我写的类的add方法似乎有问题。。我想用数组制作一个SortedList,但我不知道问题出在哪里。这是我的代码:Java中按数组排序列表的实现问题,java,arrays,sortedlist,Java,Arrays,Sortedlist,我写的类的add方法似乎有问题。。我想用数组制作一个SortedList,但我不知道问题出在哪里。这是我的代码: public class SortedList { private Integer[] elements; private int size; private int capacity; public SortedList(int cap) { elements = new Integer[cap]; if (c
public class SortedList {
private Integer[] elements;
private int size;
private int capacity;
public SortedList(int cap) {
elements = new Integer[cap];
if (cap > 0)
{
cap = capacity;
}
else
capacity = 10;
}
public boolean isEmpty()
{
return size == 0;
}
public boolean isFull()
{
return size == capacity;
}
public int size()
{
return size;
}
public void doubleCapacity()
{
capacity = capacity * 2;
}
public void add(Integer el)
{
if(this.isEmpty())
{
elements[0] = el;
size++;
}
else if(this.isFull())
{
this.doubleCapacity();
for(int i = 0; i<this.size(); i++)
{
if(el >= elements[i])
{
elements[i+2] = elements[i+1];
elements[i+1] = el;
}
else
{
elements[i+1] = elements[i];
elements[i] = el;
}
}
size++;
}
else
{
for(int i = 0; i<this.size(); i++)
{
if(el >= elements[i])
{
elements[i+2] = elements[i+1];
elements[i+1] = el;
}
else
{
elements[i+1] = elements[i];
elements[i] = el;
}
}
size++;
}
}
public String toString()
{
String s = "";
s = s + "<SortedList[";
for(int i = 0; i < this.size(); i++)
{
s = s + elements[i];
if(i < this.size()-1)
s = s + ",";
}
s = s + "]>";
return s;
}
public static void main(String[] args)
{
SortedList sl = new SortedList(5);
sl.add(3);
//sl.add(2);
sl.add(4);
sl.add(5);
// sl.add(6);
System.out.println(sl.toString());
}
}
公共类分类列表{
私有整数[]元素;
私有整数大小;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
cap=容量;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共空添加(整数el)
{
if(this.isEmpty())
{
元素[0]=el;
大小++;
}
else if(this.isFull())
{
这是doubleCapacity();
对于(int i=0;i=elements[i])
{
元素[i+2]=元素[i+1];
元素[i+1]=el;
}
其他的
{
元素[i+1]=元素[i];
元素[i]=el;
}
}
大小++;
}
其他的
{
对于(int i=0;i=elements[i])
{
元素[i+2]=元素[i+1];
元素[i+1]=el;
}
其他的
{
元素[i+1]=元素[i];
元素[i]=el;
}
}
大小++;
}
}
公共字符串toString()
{
字符串s=“”;
s=s+“”;
返回s;
}
公共静态void main(字符串[]args)
{
分拣列表sl=新分拣列表(5);
sl.add(3);
//sl.add(2);
sl.add(4);
sl.add(5);
//sl.add(6);
System.out.println(sl.toString());
}
}
如果我只在列表中添加2个整数,我的代码就可以工作,但是当我尝试添加数字3,4,5时,我得到3,5,5
有什么问题吗?谢谢..您的插入代码无效
elements[i+1] = elements[i];
elements[i] = el;
元素[i+1]
的旧值会发生什么变化?插入代码无效
elements[i+1] = elements[i];
elements[i] = el;
元素[i+1]
的旧值会发生什么变化?我建议对以前的解决方案进行以下更改。如果您只在toString()中调用sort,那么在一行中有多个未排序的元素的情况下,列表将很快失去顺序(现在您可以从toString()中删除sort()。它本质上是一种快速插入排序,一旦不能在列表中进行任何交换,它就会消失。同样,正如dty所建议的,一个更快的选择是通过二进制搜索找到插入点
公共交通容量(){
公共无效排序(){
//遍历列表,直到其排序。
对于(int i=size()-2;i>=0&&(elements[i]
}
我建议对以前的解决方案进行以下更改。如果您只在toString()中调用sort,那么在一行中有多个未排序的元素的情况下,列表将很快失去顺序(现在您可以从toString()中删除sort())。它本质上是一种快速插入排序,一旦无法在列表中进行任何交换,它就会消失。同样,正如dty所建议的,一种更快的选择是通过二进制搜索找到插入点
公共交通容量(){
公共无效排序(){
//遍历列表,直到其排序。
对于(int i=size()-2;i>=0&&(elements[i]
}
公共类分类列表{
private Integer[] elements;
private int size=0;
private int capacity;
public SortedList(int cap) {
elements = new Integer[cap];
if (cap > 0)
{
capacity = cap;
}
else
capacity = 10;
}
public boolean isEmpty()
{
return size == 0;
}
public boolean isFull()
{
return size == capacity;
}
public int size()
{
return size;
}
public void doubleCapacity()
{
capacity = capacity * 2;
}
public void add(Integer el) throws Exception{
elements[size] = el;
size++;
if(size>capacity){
throw new Exception("Size Exceeded");
}
}
public String toString()
{
sort();
String s = "";
s = s + "<SortedList[";
for(int i = 0; i < this.size(); i++)
{
s = s + elements[i];
if(i < this.size()-1)
s = s + ",";
}
s = s + "]>";
return s;
}
public void sort(){
for (int i=0; i <size()-1; i++) {
if (elements[i] > elements[i+1]) {
// exchange elements
int temp = elements[i];
elements[i] = elements[i+1];
elements[i+1] = temp;
}
}
}
public static void main(String[] args)
{
try {
SortedList sl = new SortedList(5);
sl.add(3);
//sl.add(2);
sl.add(6);
sl.add(5);
私有整数[]元素;
私有整数大小=0;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
容量=上限;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共void add(整数el)引发异常{
元素[大小]=el;
大小++;
如果(大小>容量){
抛出新异常(“超出大小”);
}
}
公共字符串toString()
{
排序();
字符串s=“”;
s=s+“”;
返回s;
}
公共无效排序(){
对于(int i=0;i元素[i+1]){
//交换元素
int temp=元素[i];
元素[i]=元素[i+1];
元素[i+1]=温度;
}
}
}
公共静态void main(字符串[]args)
{
试一试{
分拣列表sl=新分拣列表(5);
sl.add(3);
//sl.add(2);
sl.add(6);
sl.add(5);
//sl.add(6);
System.out.println(sl.toString());
}捕获(例外情况除外){
Logger.getLogger(SortedList.class.getName()).log(Level.SEVERE,null,ex);
}
}
}公共类分类列表{
private Integer[] elements;
private int size=0;
private int capacity;
public SortedList(int cap) {
elements = new Integer[cap];
if (cap > 0)
{
capacity = cap;
}
else
capacity = 10;
}
public boolean isEmpty()
{
return size == 0;
}
public boolean isFull()
{
return size == capacity;
}
public int size()
{
return size;
}
public void doubleCapacity()
{
capacity = capacity * 2;
}
public void add(Integer el) throws Exception{
elements[size] = el;
size++;
if(size>capacity){
throw new Exception("Size Exceeded");
}
}
public String toString()
{
sort();
String s = "";
s = s + "<SortedList[";
for(int i = 0; i < this.size(); i++)
{
s = s + elements[i];
if(i < this.size()-1)
s = s + ",";
}
s = s + "]>";
return s;
}
public void sort(){
for (int i=0; i <size()-1; i++) {
if (elements[i] > elements[i+1]) {
// exchange elements
int temp = elements[i];
elements[i] = elements[i+1];
elements[i+1] = temp;
}
}
}
public static void main(String[] args)
{
try {
SortedList sl = new SortedList(5);
sl.add(3);
//sl.add(2);
sl.add(6);
sl.add(5);
私有整数[]元素;
私有整数大小=0;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
容量=上限;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共void add(整数el)引发异常{
元素[大小]=el;
大小++;
如果(
private Integer[] elements;
private int size=0;
private int capacity;
public SortedList(int cap) {
elements = new Integer[cap];
if (cap > 0)
{
capacity = cap;
}
else
capacity = 10;
}
public boolean isEmpty()
{
return size == 0;
}
public boolean isFull()
{
return size == capacity;
}
public int size()
{
return size;
}
public void doubleCapacity()
{
capacity = capacity * 2;
}
public void add(Integer el) throws Exception{
elements[size] = el;
size++;
if(size>capacity){
throw new Exception("Size Exceeded");
}
}
public String toString()
{
sort();
String s = "";
s = s + "<SortedList[";
for(int i = 0; i < this.size(); i++)
{
s = s + elements[i];
if(i < this.size()-1)
s = s + ",";
}
s = s + "]>";
return s;
}
public void sort(){
for (int i=0; i <size()-1; i++) {
if (elements[i] > elements[i+1]) {
// exchange elements
int temp = elements[i];
elements[i] = elements[i+1];
elements[i+1] = temp;
}
}
}
public static void main(String[] args)
{
try {
SortedList sl = new SortedList(5);
sl.add(3);
//sl.add(2);
sl.add(6);
sl.add(5);