【问题标题】:How to compare two primitive integer types stored in an array list?如何比较存储在数组列表中的两种原始整数类型?
【发布时间】:2018-04-03 05:18:08
【问题描述】:

试图从用户那里获取输入。用户无法计算输入的长度。所以我正在使用 ArrayList 添加来自扫描仪的输入。之后,我通常会尝试比较原始整数的 ArrayList 的内容。使用 get(int index) 返回错误:

package BubbleSort;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class BubbleSort {

    public static ArrayList swap(ArrayList x, int i, int j) {
        Collections.swap(x, i, j);
        return x;
    }

    public static void main(String args[]) {

        List a = new ArrayList();
        Scanner sc = new Scanner(System.in);
        a.add(sc.nextInt());

        int x = a.size() - 1;
        boolean unsorted = true;
        while (unsorted) {
            unsorted = false;
            for (int i = 0; i < x; i++) {

                if (a.get(i) > a.get(i + 1)) {  //  <===== Error
                    BubbleSort.swap(a, i, i + 1);
                    unsorted = true;
                }

            }
            x--; // Space utilization
        }
        System.out.println(Arrays.toString(a));

    }

}

错误:

The operator > is undefined for the argument type(s) java.lang.Object, java.lang.Object

如何像在数组中一样比较整数?

【问题讨论】:

  • 您不能对对象使用关系运算符(如&gt;)。
  • 我没有意识到它返回对象只是我发现了这个错误。

标签: java algorithm data-structures bubble-sort


【解决方案1】:

你应该试试这个:

public static ArrayList swap(ArrayList<Integer> x, int i, int j) {
    Collections.swap(x, i, j);
    return x;
}

public static void main(String args[]) 
{
    ArrayList<Integer> a = new ArrayList<Integer>();
    Scanner sc = new Scanner(System.in);
    a.add(sc.nextInt());

    int x = a.size() - 1;
    boolean unsorted = true;
    while (unsorted) {
        unsorted = false;
        for (int i = 0; i < x; i++) {

            if (a.get(i) > a.get(i + 1)) {  //  <===== Error
                BubbleSort.swap(a, i, i + 1);
                unsorted = true;
            }

        }
        x--; // Space utilization
    }
    System.out.println(a.toString());
}
  1. 您将 &gt; 运算符用于两个对象,即 a.get(i)a.get(i + 1)。在 Java 中,您只能将此运算符用于数字数据类型。通过使用泛型&lt;Integer&gt;,您基本上指定每个元素都是整数类型。

  2. Arrays 类中没有名为 toString(List) 的方法。但是,您可以使用所有对象的 toString() 方法,例如 a.toString()

【讨论】:

    【解决方案2】:

    ListArraylist 是泛型类型。由于您没有定义它们的类型,它们返回一个对象。如果将类型定义为 Integer,则它将返回 Integer 而不是对象。尝试通过编写来定义他们的类型是什么

    List<Integer> a = new ArrayList<>();
    

    您可以在此处阅读有关泛型的更多信息:

    https://docs.oracle.com/javase/tutorial/java/generics/index.html

    【讨论】:

      【解决方案3】:

      当您使用a.get(i) 时,它将返回对象元素而不是整数值,这就是为什么您不能比较像 > 或 int 然后您才能进行比较。

      如下更改你的陈述,

      if ((int) a.get(i) > (int) a.get(i + 1)) {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        相关资源
        最近更新 更多