2014-03-01 390 views
0

while循环应该比较这两个对象的ibsn。 对象进行比较:无限while循环

list[0] = new ReadingMatter ("Words and Stuff", "9-082-1090-1"); 
    list[1] = new Magazine ("Fashion", "318921019", "Mike Dales"); 
    list[2] = new Book ("Rocks and Minerals", "3-323-0691-2", "Jamie Dawson"); 
    String[] mainCharacters = {"Lennie","George","Candy"}; 
    list[3] = new Novel ("Of Mice and Men", "4-569-2190-1", "John Steinbeck", mainCharacters); 
    list[4] = new TextBook ("Java, Java, Java", "3-131-9871-0", "John Smith", true); 

变更后的compareTo:

public int compareTo(Object other) 
{ 
    ReadingMatter temp = (ReadingMatter)other; 
    int result = 0; 

    if (this.isbn.compareTo(temp.getIsbn()) > 0) 
     result = -1; 
    else if (this.isbn.compareTo(temp.getIsbn()) < 0) 
     result = 1; 

    return result; 
} 

while循环

while(testing) 
    { 
    testing = false; 

    for(int j = 0; j < list.length - 1; j++) 
    { 
     if (list[j].compareTo(list[j+1]) > 0) 
      { 
      temp = list[0]; 
      list[0] = list[1]; 
      list[1] = temp; 

      testing = true; 
      } 
    } 
    } 

是它的东西做的连字符的数字?我如何绕过连字符?

编辑:问题是,循环是无限的,如果总是被用来声明

+3

有什么问题吗? – Razvan

+0

您没有包含足够的详细信息以获得满意的答案。你有什么问题? isbn.compareTo方法的代码在哪里?杂志和书籍是否延伸ReadingMatter? –

+1

你应该参数化你的'Comparable';还有什么可以重写为'return other.isbn.compareTo(isbn);' – fge

回答

1

的问题是,你总是切换指数在0和1,但检查索引j和j + 1:

if (list[j].compareTo(list[j+1]) > 0) 
{ 
    temp = list[0]; 
    list[0] = list[1]; 
    list[1] = temp; 

    testing = true; 
} 

因此,如果您有一个索引对j,j+1与j> 2 compareTo提供> 0您将得到您的无限循环。

+0

我在数组中有5个,我只是将它们从简单的 – Johny

+0

中编辑出来,并且仍然总是将list [0]与list [1]交换。列表中的所有其他元素甚至不会被排序,所以在循环结束时'testing'总是正确的。这是你的答案。 – ingenious

+0

对不起。我仍然不允许编辑这个答案。我试图在正确的版本下打印。最高版本是指出他的问题。 – wumpz

0

由于您的有条件订单元素01,您最终将以list[0] < list[1] < list[2]结尾,它将再次设置testing=true和循环。