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♦
408k90 gold badges570 silver badges715 bronze badges
asked Oct 1, 2012 at 13:18
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♦Bohemian
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 thefor
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
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 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
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 как решение Решение
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
для этих целей.