Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT代码段2。表排序。循环中的项数组更改。这是怎么回事?_Java_Sorting_Swt_Code Snippets - Fatal编程技术网

Java SWT代码段2。表排序。循环中的项数组更改。这是怎么回事?

Java SWT代码段2。表排序。循环中的项数组更改。这是怎么回事?,java,sorting,swt,code-snippets,Java,Sorting,Swt,Code Snippets,我正在SWT中尝试向表小部件添加排序。从Snippet2sortListener处理程序复制代码无效。它正确地将两个项目交换为排序顺序。表中有两个以上的项目,结果不可预测 在我看来(以下代码摘录自Snippet2sortListener),当一个项目是disposed()时,items[i].dispose()将更改TableItems调用的项目的数组,我们将在外部for循环中对其进行迭代,for(int i=1……),并插入到新索引的项中,整个数组将重新创建。这肯定会中断迭代吗 所以,我想我有

我正在SWT中尝试向表小部件添加排序。从Snippet2
sortListener
处理程序复制代码无效。它正确地将两个项目交换为排序顺序。表中有两个以上的项目,结果不可预测

在我看来(以下代码摘录自Snippet2
sortListener
),当一个项目是
disposed()时,
items[i].dispose()
将更改
TableItems
调用的项目的数组,我们将在外部for循环中对其进行迭代,
for(int i=1……
,并插入到新索引的项中,整个数组将重新创建。这肯定会中断迭代吗

所以,我想我有两个问题:

  • 关于Snippet2的算法,我还不了解什么
  • 排序操作可能返回随机结果,还有其他明显的原因吗(请记住,我是一个noob,所以我可能犯了最愚蠢的错误)
  • 这是我的密码:

    Listener sortListener = new Listener() {
        public void handleEvent(Event e) {
            TableItem[] items = table.getItems();
            Collator collator = Collator.getInstance(Locale.getDefault());
            TableColumn column = (TableColumn)e.widget;
            int index = column == column1 ? 0 : 1;
            for (int i = 1; i < items.length; i++) {                <--------- HERE
                String value1 = items[i].getText(index);
                for (int j = 0; j < i; j++){
                    String value2 = items[j].getText(index);
                    if (collator.compare(value1, value2) < 0) {
                        String[] values = {items[i].getText(0), items[i].getText(1)};
                        items[i].dispose();                         <--------- HERE
                        TableItem item = new TableItem(table, SWT.NONE, j);
                        item.setText(values);
                        items = table.getItems();                   <--------- HERE
    
                        break;
                    }
                }
            }
            table.setSortColumn(column);
        }
    };
    
    Listener sortListener=newlistener(){
    公共无效handleEvent(事件e){
    TableItem[]items=table.getItems();
    Collator-Collator=Collator.getInstance(Locale.getDefault());
    TableColumn=(TableColumn)e.widget;
    int index=column==column1?0:1;
    
    对于(inti=1;i 但它只适用于2列。(这是你的问题吗?
    如果表中有更多列,则代码如下所示:

        Listener sortListener = new Listener() {
            public void handleEvent(Event e) {
                TableItem[] items = table.getItems();
                Collator collator = Collator.getInstance(Locale.getDefault());
                TableColumn column = (TableColumn)e.widget;
                int index = table.indexOf(column);
                for (int i = 1; i < items.length; i++) {             //   <--------- HERE
                    String value1 = items[i].getText(index);
                    for (int j = 0; j < i; j++){
                        String value2 = items[j].getText(index);
                        if (collator.compare(value1, value2) < 0) {
                            String[] values = new String[table.getColumnCount()];
                            for (int columnIdx = 0; columnIdx < table.getColumnCount(); 
                                    columnIdx++){
                                values[columnIdx] = items[i].getText(columnIdx);
                            }
                            items[i].dispose();                      //   <--------- HERE
                            TableItem item = new TableItem(table, SWT.NONE, j);
                            item.setText(values);
                            items = table.getItems();                //   <--------- HERE
    
                            break;
                        }
                    }
                }
                table.setSortColumn(column);
            }
        };
    
    Listener sortListener=newlistener(){
    公共无效handleEvent(事件e){
    TableItem[]items=table.getItems();
    Collator-Collator=Collator.getInstance(Locale.getDefault());
    TableColumn=(TableColumn)e.widget;
    int index=table.indexOf(列);
    
    对于(inti=1;i 但它只适用于2列。(这是你的问题吗?
    如果表中有更多列,则代码如下所示:

        Listener sortListener = new Listener() {
            public void handleEvent(Event e) {
                TableItem[] items = table.getItems();
                Collator collator = Collator.getInstance(Locale.getDefault());
                TableColumn column = (TableColumn)e.widget;
                int index = table.indexOf(column);
                for (int i = 1; i < items.length; i++) {             //   <--------- HERE
                    String value1 = items[i].getText(index);
                    for (int j = 0; j < i; j++){
                        String value2 = items[j].getText(index);
                        if (collator.compare(value1, value2) < 0) {
                            String[] values = new String[table.getColumnCount()];
                            for (int columnIdx = 0; columnIdx < table.getColumnCount(); 
                                    columnIdx++){
                                values[columnIdx] = items[i].getText(columnIdx);
                            }
                            items[i].dispose();                      //   <--------- HERE
                            TableItem item = new TableItem(table, SWT.NONE, j);
                            item.setText(values);
                            items = table.getItems();                //   <--------- HERE
    
                            break;
                        }
                    }
                }
                table.setSortColumn(column);
            }
        };
    
    Listener sortListener=newlistener(){
    公共无效handleEvent(事件e){
    TableItem[]items=table.getItems();
    Collator-Collator=Collator.getInstance(Locale.getDefault());
    TableColumn=(TableColumn)e.widget;
    int index=table.indexOf(列);
    
    对于(inti=1;i您可能希望对SWT表()使用JFace包装器,这为您的表提供了更多内置功能。我建议您这样做。

    您是否尝试过调试代码或输出项目数组?我真的认为这会对您有所帮助。您是否尝试过调试代码或输出项目数组?我真的认为这会对您有所帮助。