Как найти отрицательное число в массиве java

I was searching for solution to find negative numbers in array and i came up with something like this code from searching.

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};
    for (int i = 0; i <= arrayNumbers.length; i++){
        int negativeCount = 0;
        if (arrayNumbers[i] >= 0){
                negativeCount++;
    }
    System.out.println(negativeCount);
    }
}

I was wondering is there an easier or shorter way to find the negative number in an array vs the code above?

Bohemian's user avatar

Bohemian

408k90 gold badges570 silver badges715 bronze badges

asked Oct 1, 2012 at 13:18

PHZE OXIDE's user avatar

10

A java 7 string-based one-liner that counts the minus signs:

System.out.println(Arrays.toString(array).replaceAll("[^-]+", "").length());

A Java 8 stream-based way:

System.out.println(Arrays.stream(array).filter(i -> i < 0).count());

Regarding your code, there are a few things wrong with it:

  • Since you don’t care about the index of an element, use the foreach syntax instead
  • Declare the scope of your count variable outside the loop, otherwise
    • it keeps getting set to zero every iteration, and
    • you couldn’t use it even if it did contain the correct count because it would be out of scope (which would be only inside the loop) where you need to return it (after the loop)
  • Use the correct test number < 0 (your code >= 0 counts non negative numbers)

Try this:

public static void main(String args[]) {
    int[] array = { 3, 4, 7, -3, -2};
    int negativeCount = 0;
    for (int number : array) {
        if (number < 0) {
            negativeCount++;
        }
    }
    System.out.println(negativeCount);
}

answered Oct 1, 2012 at 13:24

Bohemian's user avatar

BohemianBohemian

408k90 gold badges570 silver badges715 bronze badges

0

A few issues with the code:

  • the terminating condition in the for will produce an out of bounds exception (arrays use zero-based index)
  • the scope of negativeCount is within the for only
  • the negative check is incorrect

A slightly shorter version would use the extended for:

int negativeCount = 0;
for (int i: arrayNumbers)
{
    if (i < 0) negativeCount++;
}

For a shorter version (but arguably less readable) eliminate the for‘s {}:

int negativeCount = 0;
for (int i: arrayNumbers) if (i < 0) negativeCount++;

answered Oct 1, 2012 at 13:21

hmjd's user avatar

hmjdhmjd

120k19 gold badges206 silver badges249 bronze badges

2

Your negativeCount should be declared outside your loop.. Also, you can move your System.out.println(negativeCount) outside your loop, as it will print for every iteration..

And you can use enhanced-for loop

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};

    int negativeCount = 0;
    for (int num: arrayNumbers) {
        if (num < 0){
                negativeCount++;
        }

    }
    System.out.println(negativeCount);
}

answered Oct 1, 2012 at 13:22

Rohit Jain's user avatar

Rohit JainRohit Jain

208k45 gold badges406 silver badges523 bronze badges

3

A bit shorter with the foreach syntax:

 int negativeCount = 0;
 for(int i : arrayNumbers)
 {
      if(i < 0)negativeCount++;
 }

answered Oct 1, 2012 at 13:23

josefx's user avatar

josefxjosefx

15.5k6 gold badges38 silver badges63 bronze badges

2

Следующая программа показывает, как найти, а потом удалить отрицательные числа из массива в Java.

Пример

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Tester {
   public static void main(String[] args) {
      List<Integer> objArray = new ArrayList<Integer>();
      objArray.clear();
      objArray.add(2);
      objArray.add(-3);
      objArray.add(4);
      System.out.println("Array before removing an element "+objArray);
      Iterator<Integer> iterator = objArray.iterator();
      
         while(iterator.hasNext()) {
         Integer next = iterator.next();
         if(next < 0) {
            iterator.remove();
         }
      }
      System.out.println("Array after removing an element"+objArray);
   }
}

Итог

Array before removing an element [ 2, -3, 4 ]
Array after removing an element [ 2, 4 ]

0 / 0 / 0

Регистрация: 27.11.2014

Сообщений: 10

1

Найти количество отрицательных элементов массива А

21.10.2015, 21:51. Показов 10789. Ответов 2


Студворк — интернет-сервис помощи студентам

еще одно задание, которое я не понимаю как делать, помогите пжлста



0



132 / 126 / 85

Регистрация: 13.09.2013

Сообщений: 485

22.10.2015, 00:19

2

Объявляешь переменную, которая будет счетчиком. Затем в цикле сравниваешь элементы массива с нулем. Если меньше, то прибавляешь к счетчику единицу. Все.



0



ArtemFM

746 / 493 / 285

Регистрация: 10.09.2015

Сообщений: 1,530

22.10.2015, 08:59

3

Лучший ответ Сообщение было отмечено chuvi03 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Arrays;
import java.util.Random;
 
public class SearchNegative {
    public static void main(String[] args) {
        Random random = new Random();
 
        int lengthArray = random.nextInt(10) + 1; //случайно выбираем длинну массива от 1 до 10
        int[] a = new int[lengthArray];
 
        //заполняем массив случайными числами от -10 до 10
        for (int i = 0; i < a.length; i++) a[i] = random.nextInt(21) - 10;
        System.out.println("Наш массив: " + Arrays.toString(a));
 
        //ищем кол-во отрицательных элементов (можно было и в первом цикле сразу найти)
        int count = 0;
        for (int i = 0; i < a.length; i++){
            if (a[i] < 0) count++;
        }
 
        System.out.print("ОТВЕТ: Наш массив имеет " + count + " отрицательных числа(-ел);");
    }
}



1



Вычислить отрицательные числа в массиве

Я искал решение, чтобы найти отрицательные числа в массиве, и я нашел что-то вроде этого кода из поиска.

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};
    for (int i = 0; i <= arrayNumbers.length; i++){
        int negativeCount = 0;
        if (arrayNumbers[i] >= 0){
                negativeCount++;
    }
    System.out.println(negativeCount);
    }
}

Мне было интересно, есть ли более простой или короткий способ найти отрицательное число в массиве против кода выше?

2012-10-01 13:18

4
ответа

Однострочная строка на основе Java, которая считает минус:

System.out.println(Arrays.toString(array).replaceAll("[^-]+", "").length());

Java 8 основанный на потоке способ:

System.out.println(Arrays.stream(array).filter(i -> i < 0).count());

Что касается вашего кода, в нем есть несколько ошибок:

  • Так как вам не важен индекс элемента, используйте вместо этого синтаксис foreach
  • Объявите область действия вашей переменной count вне цикла, в противном случае
    • он становится равным нулю на каждой итерации, и
    • Вы не могли бы использовать его, даже если он действительно содержал правильное количество, потому что он был бы вне области видимости (который был бы только внутри цикла), где вы должны вернуть его (после цикла)
  • Используйте правильный тест number < 0 (ваш код >= 0 считает не отрицательные числа)

Попробуй это:

public static void main(String args[]) {
    int[] array = { 3, 4, 7, -3, -2};
    int negativeCount = 0;
    for (int number : array) {
        if (number < 0) {
            negativeCount++;
        }
    }
    System.out.println(negativeCount);
}

2012-10-01 13:24

Несколько проблем с кодом:

  • завершающее условие в for создаст исключение вне границ (массивы используют индекс, начинающийся с нуля)
  • сфера действия negativeCount находится в пределах for только
  • отрицательный чек неверен

Немного более короткая версия будет использовать расширенный for:

int negativeCount = 0;
for (int i: arrayNumbers)
{
    if (i < 0) negativeCount++;
}

Для более короткой версии (но, возможно, менее читабельной) исключите for“s {}:

int negativeCount = 0;
for (int i: arrayNumbers) if (i < 0) negativeCount++;

2012-10-01 13:21

Ваш отрицательный счет должен быть объявлен вне вашего цикла. Кроме того, вы можете переместить ваш System.out.println(negativeCount) вне вашего цикла, так как он будет печататься для каждой итерации.

И вы можете использовать расширенный цикл

public static void main(String args[]){
    int arrayNumbers[] = { 3, 4, 7, -3, -2};

    int negativeCount = 0;
    for (int num: arrayNumbers) {
        if (num < 0){
                negativeCount++;
        }

    }
    System.out.println(negativeCount);
}

2012-10-01 13:22

Немного короче с синтаксисом foreach:

 int negativeCount = 0;
 for(int i : arrayNumbers)
 {
      if(i < 0)negativeCount++;
 }

2012-10-01 13:23

Проблема заключается в этом блоке кода

        if (Math.abs(array[i]) > max){
            max = array[i];
        }

Вы сравниваете абсолютную величину элемента array[i] с не абсолютной величиной переменной max. Я предполагаю, что вы ищите в массиве элемент по максимальному абсолютному значению. Иначе, вообще, не понятно, почему вы используете метод abs.

По крайней мере вам следовало бы написать

        if (Math.abs(array[i]) > Math.abs( max ) ){
            max = array[i];
        }

Кроме того данный алгоритм обычно выполняется следующим образом.
Сначала max кладется равной значению array[0]. Затем используете цикл, начиная со счетчика цикла, равного 1.

Вот минимальная демонстрационная программа, которая показывает, как найти максимум по абсолютной величине и просто максимум.

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] array = { -100 , -5, 80, 999, 666, -3333 };

        int max_abs = array[0];
        int max = array[0];

        for ( int i = 1; i < array.length; i++ )
        {
            if ( Math.abs( max_abs ) < Math.abs( array[i] ) )
            {
                max_abs = array[i];
            }

            if ( max < array[i] )
            {
                max = array[i];
            }
        }

        System.out.println( "Absolute maximum value is " + Math.abs( max_abs ) );
        System.out.println( "Maximum value is " + max );
    }
}

Вывод программы на консоль:

Absolute maximum value is 3333
Maximum value is 999

Сравните полученные результаты.

Что касается данного пункта

3.Если максимальных чисел несколько, нужно вывести на экран.

то следует поместить его в отдельный вопрос. То есть в одном вопросе разберитесь с отрицательными числами, а в другом вопросе решайте уже совершенно другую проблему, предоставив соответствующий код, и указав, что у вас не получается. Скорей всего вам потребуется использовать ArrayList для этих целей.

Добавить комментарий