从最大到最小的数组中排序整数。负面的int不起作用

时间:2017-12-06 01:15:18

标签: java arrays

最近我创建了一个程序,它在数组中包含int并将它们放在另一个数组中,从最大到最小,但是当你插入底片时它不起作用。它打印0而不是负整数。

import java.util.Arrays;

public class g2lArrays2 {

    public static void main(String[] args) {
        int[] nums = {15,31,7,2,7};
        int[] place = new int [nums.length];
        int[] definer = new int [nums.length];
        int a = 0,b = 0,c;
        place[0] = a;
        place[1] = 1;
        for (int i1 = 0; i1<place.length; i1++) {
        for (int i = 0; i<nums.length; i++) {
            if (nums[i] > a) {
                place[i1]=nums[i];
                a=place[i1];
                definer[i]=1;
            }
        }
        a = 0;
        for (c = definer.length-1; b==0 && c>-1; c--) {
            if (definer[c]==1) {
                b=c;
            }
        }
        nums[b]=0;
        b=0;
        for (int i2 = 0; i2<definer.length; i2++) {
            definer[i2]=0;
        }
        }
        System.out.println(Arrays.toString(place));
    }
}

它起作用,但就像我说的那样,只是没有负整数。所以我很好奇我做错了什么,以及是否有更有效的方法来对这个程序进行排序。所有反馈都表示赞赏。

1 个答案:

答案 0 :(得分:0)

好吧我认为FairPlay答案完全是排序数组的最佳方式。那说你问为什么你的代码有问题,这就是我将在这里解释的。

首先,您要打印名为place的数组,因此我只会评论代码涉及该特定数组的位置。

这是代码中影响地点数组的部分:

public static void main(String[] args) {
    int[] nums = {15,31,7,2,7};
    int[] place = new int [nums.length];
    int[] definer = new int [nums.length];
    int a = 0,b = 0,c;
    place[0] = a;
    place[1] = 1;
    for (int i1 = 0; i1<place.length; i1++) {
    for (int i = 0; i<nums.length; i++) {
        if (nums[i] > a) {
            place[i1]=nums[i];
            a=place[i1];
            definer[i]=1;

好的,首先让我们清楚这一点。首先要注意的是正确的识别,并在你认为它是好的时候创建换行符。第二,当创建一个仅在循环中使用的变量或者在for中使用i,j或k时,如果可能的话重复它们(这是我这样做的,它更多的是一个小费而不是规则)。

这是干净的代码:

public static void main(String[] args) {

    int[] nums = {15,31,7,2,7};
    int[] place = new int [nums.length];
    int[] definer = new int [nums.length];

    int a = 0,
    int b = 0;

    place[0] = a;
    place[1] = 1;

    for (int i = 0; i < place.length; i++) {

        for (int j = 0; j < nums.length; j++) {

            if (nums[j] > a) {

                //first a = 0 just so i remember
                //int[] nums = {15,31,7,2,7};

                place[i] = nums[j];
                a = place[i];
                definer[j] = 1;

知道了!问题恰恰在于if。问题在于[n]&gt;一个。显然负数不会通过检查,这就是问题所在。

编辑:好吧,我刚刚意识到我误读了第一个结束的地方(错误的认同),但问题是一样的。你会遇到负数问题,因为你的a和b在每个循环中都设置为0。出现在负数位置的0是因为你在nums数组中添加了b = 0.

要解决这个问题,你应该使用array.sort(),因为FairPlay在他的回答中说。试图解决这个问题并不值得。