Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 附加字符串的ArrayList整数排序_Java_String_Sorting_Arraylist_Int - Fatal编程技术网

Java 附加字符串的ArrayList整数排序

Java 附加字符串的ArrayList整数排序,java,string,sorting,arraylist,int,Java,String,Sorting,Arraylist,Int,我试图对ArrayList中的整数进行排序,这部分工作正常,但我也试图使并行数组与正确的整数匹配。我也不能把它们组合成一个对象。如果我有3个单词和3个数字(ArrayList中的数字和ArrayList中的单词(“Hello”-2,“-5”,代表“-1”).我想让For和1排在第一位,然后Hello和to last将是and 5。因此,它将带数字的单词。我下面的代码是对整数的正确排序,但这些单词似乎是随机的 void quickSort2 (ArrayList<Integer> li

我试图对ArrayList中的整数进行排序,这部分工作正常,但我也试图使并行数组与正确的整数匹配。我也不能把它们组合成一个对象。如果我有3个单词和3个数字(ArrayList中的数字和ArrayList中的单词(“Hello”-2,“-5”,代表“-1”).我想让For和1排在第一位,然后Hello和to last将是and 5。因此,它将带数字的单词。我下面的代码是对整数的正确排序,但这些单词似乎是随机的

void quickSort2 (ArrayList<Integer> list, int first, int last, ArrayList list2){

    //Set first and last
    int g = first, h = last;
    int midIndex, dividingValue;

    //middle values
    midIndex = (first + last) / 2;
    dividingValue = list.get(midIndex);

    System.out.println("midIdex = "+midIndex + "first = "+first+"last = "+last);

    //find if higher or lower
    do{
        while (list.get(g) < dividingValue) {
            g++;

        }
        while (list.get(h) > dividingValue){
            h--;

        }
        if (g <= h){  

            //Switch ints (Works)
            int temp = list.get(g);
            list.set(g,list.get(h));
            list.set(h,temp);
            g++;
            h--;

            //Switch Strings with the ints (Doesnt work)
            ArrayList blah = new ArrayList();

            blah.add(list2.get(g));
            list2.set(g,list2.get(h));
            list2.set(h,blah.get(0));

        }
    }
    while (g<h);

    //Back to the method
    if(h>first) {
        quickSort2(list, first, h, list2);

    }
    if(g<last) {
        quickSort2(list, g, last, list2);

    }
}
void quickSort2(ArrayList列表、int-first、int-last、ArrayList列表2){
//首当其冲
int g=第一个,h=最后一个;
int midIndex,dividingValue;
//中间值
midIndex=(第一个+最后一个)/2;
dividingValue=list.get(midIndex);
System.out.println(“midIdex=“+midIndex+”first=“+first+”last=“+last”);
//找出是高还是低
做{
while(list.get(g)dividingValue){
h--;
}

如果(g可能在增加g和h的值之前,您应该尝试切换字符串…而且您不需要创建Arraylist blah-只需像对int那样获取字符串

类似这样的东西…我没有深入研究您的代码,但这很可能是一个错误

//Switch ints (Works)
int temp = list.get(g);
list.set(g,list.get(h));
list.set(h,temp);
// *** Don't increment here ***

// *** Switch Strings with the ints first ***
String tempStr = list2.get(g);
list2.set(g,list2.get(h));
list2.set(h,tempStr );

// *** Now increment ***
 g++;
 h--;

下面是一个简单的类,用于将整数键和
字符串组合在一起:

public class DataItem {
    // These are the pieces of data each DataItem will carry around
    private int key;
    private String data;

    // This is a constructor; if you say new DataItem(2,"Hello"), it creates an
    // object whose key is 2 and data is "Hello"
    public DataItem(int key, String data) {
        this.key = key;
        this.data = data;
    }

    // A method to get the object's key
    public int getKey() {
        return key;
    }

    // A method to get the object's data
    public String getData() {
        return data;
    }

}
现在,您的
quickSort2
方法将采用
ArrayList
而不是
ArrayList
。当您在
ArrayList
上使用
get
方法时,它将返回一个完整的
DataItem
,而不仅仅是一个
Integer
。这意味着如果您想要整数,需要调用
getKey()
来获取它。因此

dividingValue = list.get(midIndex);
你会说

dividingValue = list.get(midIndex).getKey();
而不是

    while (list.get(g) < dividingValue) {
while(list.get(g)
是的

    while (list.get(g).getKey() < dividingValue) {
while(list.get(g).getKey()
不过,好消息是,当您切换项时,它将切换整个
数据项
,这意味着
字符串
将保留整数,这是您想要的。因此,在“switch ints”下注释,将
temp
的类型从
int
更改为
DataItem
。然后您的交换将交换所有内容


(为了更好地实现这一点,您可以使用
DataItem
实现
Comparable
,方法是将
compareTo
方法添加到
compareTo
中,通过只比较
字段将一个
数据项
与另一个
进行比较。然后您可以在
DataItem
的数组上使用内置排序和其他方法。我会让您阅读这篇文章。)

使用排序映射实现。“我也不能将它们放入分组对象”为什么?键值对如何?通过“分组对象”,我假设你指的是一个既有整数又有
字符串的对象。那么为什么你不能创建一个分组对象呢?当你只想对其中一个数据段进行排序作为键时,这是对多个数据段进行排序的正常方法。我只是在学习java,这是一个类。我可以这样做,但我不知道如果有人能解释的话,那就太好了。真的行了!谢谢你!我一直认为一旦你在If,你就呆在里面了。