当前位置: 首页 > 知识库问答 >
问题:

分区负和正没有比较0使用java

韩善
2023-03-14

您将得到一个由n个整数组成的数组,包括负数和正数。您需要将数组划分为正数和负数。将数组的所有正整数添加到一个数组(或任何数据结构),并将所有负数添加到另一个数组(或任何数据结构)。如果输入数组的第一个元素是正数,则在输出的第一行中按给定顺序打印所有正数,然后在输出的第二行中按给定顺序打印所有负数,反之亦然。

笔记:

将0视为正数。

输出中的正负数字应该遵循给定数组中元素的顺序。输出的每一行中的每个数字都应该用一个空格分隔。

如果数组只包含正数,则在第一行打印正数,在第二行打印“数组没有负数”。

如果数组只包含负数,则在第一行打印负数,在第二行打印“数组没有正数”。

输入:

10个

2 6 9 -1 -4 10 -7 3 5 -8

输出:

2 6 9 10 3 5

-1 -4 -7 -8

说明:

数组的第一个元素是2,这是一个正数,所以在第一行打印数组的所有正数,然后在下一行打印所有负数

在这里,我做了50%的工作(在单独的arraylist中划分-ve和ve整数),剩下的50%我们必须检查数组中是否没有给出正数,然后打印给定的消息,反之亦然

 import java.util.*;

public class Source {
    public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int n = sc.nextInt();
       int arr[] = new int[n];
       for (int i = 0; i < n; i++) {
           arr[i] = sc.nextInt();
       }
       partitionNegativeAndPositive(n, arr);
    }
    
    static  boolean oppositeSign(int x,int y) {
        return ((x^y)<0);
    }
    static void printList(ArrayList<Integer> list) {
        String result="";
        for(int i=0;i<list.size();i++) {
            result+=list.get(i)+" ";
        }
        System.out.println(result);
    }

    // Method to partition negative and positive numbers without comparing with 0
    static void partitionNegativeAndPositive(int n, int arr[]) {
        
      // Write your code here
        ArrayList<Integer> a = new ArrayList<Integer>();
        ArrayList<Integer> b = new ArrayList<Integer>();
        //push first element
        a.add(arr[0]);
        // Now put all elements of same sign
        // in a[] and opposite sign in b[]
        for(int i=1;i<n;i++) {
            if(oppositeSign( a.get(0), arr[i])) {
                b.add(arr[i]);
            }else {
                a.add(arr[i]);
            }
        }
        if(arr[0]>=0) {
            if(a.size()>=0) {
                printList(a);
            }else {
                System.out.println("Array doesn't have positive numbers");
            }
            if(b.size()>=0) {
                printList(b);
            }else {
                System.out.println("Array doesn't have negative numbers");
            }
        }else {
            if(b.size()>=0) {
                printList(b);
            }else {
                System.out.println("Array doesn't have negative numbers");
            }
            if(a.size()>=0) {
                printList(a);
            }else {
                System.out.println("Array doesn't have positive numbers");
            }
        }
    }
}

请帮助我在这段代码中哪里做错了

共有3个答案

诸葛苏燕
2023-03-14
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        int arr[] = {-2, -6, -9, -1, -4, -10, -7, -3, -5, -8};

        boolean isPositive = false;
        boolean isNegative = false;

        boolean fElement = arr[0] >= 0;

        ArrayList<Integer> pos = new ArrayList<Integer>();
        ArrayList<Integer> neg = new ArrayList<Integer>();

        for(int i : arr){
            if(i >= 0){
                pos.add(i);
                isPositive = true;
            }else{
                neg.add(i);
                isNegative = true;
            }
        }

        if(fElement){
            for(int i : pos){
                System.out.print(i + " ");
            }
            System.out.println();

            if(isNegative){
                for(int i : neg){
                    System.out.print(i + " ");
                }
            }else{
                System.out.println("No negative numbers");
            }

        }else{
            for(int i : neg){
                System.out.print(i + " ");
            }
            System.out.println();

            if(isPositive){
                for(int i : pos){
                    System.out.print(i + " ");
                }
            }else{
                System.out.println("No positvie numbers");
            }

        }
    }
}
漆雕皓轩
2023-03-14

代码中的问题是,您正在检查数组的大小是否为零或更大,然后打印该数组,否则打印消息。但是数组的大小总是为零或更多。

要获得所需的输出,只需进行以下更改。

     if(arr[0]>=0) {
        if(a.size()>0) { // <--  compare for size greater than 0 only
            printList(a);
        }else {
            System.out.println("Array doesn't have positive numbers");
        }
        if(b.size()>0) { // <--  compare for size greater than 0 only
            printList(b);
        }else {
            System.out.println("Array doesn't have negative numbers");
        }
    }else {
        if(b.size()>0) { // <--  compare for size greater than 0 only
            printList(b);
        }else {
            System.out.println("Array doesn't have negative numbers");
        }
        if(a.size()>0) { // <--  compare for size greater than 0 only
            printList(a);
        }else {
            System.out.println("Array doesn't have positive numbers");
        }
    }
颛孙飞
2023-03-14

你的antipiteSign方法是个好主意,但它仍然可以与零进行比较。如果认为int值的最左端表示符号,并且可以被提取出来,用作分区索引,则可以在不进行比较的情况下执行分区操作。此外,Java不是C。您不需要传递数组长度,因为Java数组知道它们的长度。此外,您应该避免使用声明语法int-arr[],而是使用int[]arr,以遵循惯用的类型名模式。

static void partitionNegativeAndPositive(int[] arr) {
    ArrayList<Integer> pos = new ArrayList<>(), neg = new ArrayList<>();

    List<List<Integer>> posNeg = Arrays.asList(pos, neg);

    for(int i: arr) posNeg.get(i >>> 31).add(i);

    if(pos.isEmpty()) {
        System.out.println("Array doesn't have positive numbers");
    }
    else {
        printList(pos);
    }
    if(neg.isEmpty()) {
        System.out.println("Array doesn't have negative numbers");
    }
    else {
        printList(neg);
    }
}

代码

 类似资料:
  • 我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。 有什么原因吗? 编辑: 以下是我的意思:

  • 问题内容: 事实证明,计算结果为,尽管和是 不同的 实体。那么,您如何与? 有一个hack: 我可以做得更好吗? 问题答案: 在ECMAScript6中,除了区分正零和负零并计算为之外,其行为类似于。 Chrome 24支持。

  • 问题内容: 在一个快速的操场上,我一直在使用 但是,这总是在添加时间元素的情况下出现。对于我的应用程序,我需要忽略时间元素。在Swift中有可能吗?如何做呢?即使我可以将time元素设置为在每个日期都相同的时间,也可以使用。 另外,我正在尝试比较两个日期,此刻我正在使用以下代码: 这是唯一的方法还是我可以忽略时间元素的方式进行操作?例如,如果它们是同一天,但时间不同,那么我不希望得到结果。 问题答

  • 问题内容: 假设我有一个具有不同值的列表,如下所示: 我想对其进行迭代,并检查每个元素是否不在某些禁止值列表中。例如,此列表为。 当我检查是否为False时,我得到了。我知道python会强制转换到此处- 但是我如何避免使用它并进行正确的检查-该值不在? 问题答案: 为了区分和之间的区别,您可以使用它们进行比较。是单例值,并且始终引用同一对象。要比较列表中的所有项目以确保它们不是,请尝试: 顺便说

  • 这个问题最近在一次采访中被问到。 这是我使用的以下方法 1)创建一个最大堆priority_queue来存储最近的点

  • 问题内容: 假设我有一个使用lambda表达式(闭包)定义的对象列表。有没有一种方法可以检查它们以便进行比较? 我最感兴趣的代码是 完整的代码是 似乎唯一的解决方案是将每个lambda定义为一个字段,并且仅使用这些字段。如果要打印出称为的方法,最好使用。lambda表达式有更好的方法吗? 此外,是否可以打印lambda并获得人类可读的内容?如果你打印而不是 得到类似的东西 甚至使用和方法。 问题答