类型点值

时间:2011-12-01 19:47:07

标签: java arrays sorting

我正在为我的Java入门课程编写一个作业,而我目前正试图对整数数组进行排序。

我从点对象数组p获取值,并将它们传递给相同大小的pSize的int数组。我需要的是将x的点对象的值转换为int并将数组排序。但是,这并没有发生。这是代码:

import java.util.*;
import java.awt.*;

public class doCheckWin {
// Class Fields
private Point[] p;
private static int pSize;

/*
        Class Constructor.
        Creates an array of point objects that holds the user's
        location of pieces.
*/
public doCheckWin(Point[] p) {
        this.p = p;
        pSize = p.length;
}

public void checkHorizontal() {
        int[] col = new int[pSize];
        for(int i=0; i<p.length; i++) {
            col[i] = (int)p[i].getX();
        }
        Arrays.sort(col);
        System.out.println(Arrays.toString(col));
    } 
}

这是来自另一个传递点对象的clas的方法:

public void checkWin(Point[] p) {
    doCheckWin dcw = new doCheckWin(p);
    dcw.checkHorizontal();
}

当我将数组打印到屏幕时,值为int ...使用getX将它们更改为double,但是当转型为int时它不起作用...

问题是:

  1. x(即:10.0)的值类型转换为整数不起作用。当在屏幕上打印结果时,我仍然得到10.0。
  2. Arrays.sort(col)没有对数组进行排序。
  3. 我正在获得的示例输出

    10.0
    13.0
    12.0
    11.0
    3.0
    

    我想要什么

    3
    10
    11
    12
    13
    

    编辑:这是用于打印数组的代码:

    Arrays.sort(col);
    for(int i=0; i<col.length; i++) {
        System.out.println(col[i]);
    }
    

2 个答案:

答案 0 :(得分:0)

  1. 您的Point个对象什么都不做。

  2. 通过对col中存储的整数进行排序,您显然不会对任何Point对象或p进行排序。您修改的只是col的内容,但它们与其他数据断开连接

答案 1 :(得分:0)

你的Point对象有什么意义(没有双关语意)?

p []的内容是什么?它是像你说的Point对象数组吗?如果是这样,为什么要从点对象创建点对象?

看起来你想要这样做:

int[] col = new int[pSize];
for (int i = 0; i < p.length; i++) {
    col[i] = (int)p[i].getX();
}
Arrays.sort(col);
System.out.println(Arrays.toString(col));

这似乎对我有用。

以下是一个例子:

int pSize = 5;
Point[] p = new Point[pSize];

Random z = new Random();
for (int i = 0; i < p.length; i++) {
    p[i] = new Point(i+z.nextInt(5), i);
}

System.out.println(Arrays.toString(p));

int[] col = new int[pSize];
for (int i = 0; i < p.length; i++) {
    col[i] = (int)p[i].getX();
}
Arrays.sort(col);
System.out.println(Arrays.toString(col));

给出了:

[java.awt.Point[x=3,y=0], java.awt.Point[x=3,y=1], java.awt.Point[x=6,y=2], java.awt.Point[x=3,y=3], java.awt.Point[x=4,y=4]]
[3, 3, 6, 3, 4]
[3, 3, 3, 4, 6]