您将得到一个由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");
}
}
}
}
请帮助我在这段代码中哪里做错了
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");
}
}
}
}
代码中的问题是,您正在检查数组的大小是否为零或更大,然后打印该数组,否则打印消息。但是数组的大小总是为零或更多。
要获得所需的输出,只需进行以下更改。
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");
}
}
你的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并获得人类可读的内容?如果你打印而不是 得到类似的东西 甚至使用和方法。 问题答