Смена знака числа java
Профиль
Группа: Участник
Сообщений: 93
Регистрация: 23.4.2011
Добрый Вечер.
Помогите Пожалуйста наисать программу которая будет считать, сколько раз в последовательности чисел меняется знак (например, в последовательности –5, –2, 9, 1, 0, 4, –3 знак меняется дважды: с минуса на плюс, затем с плюса на минус).
Без использования массива!
Код |
import java.util.Scanner; |
Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara
Код |
public class Main |
public static void main(String[] args) Scanner con = new Scanner(System.in);
System.out.println(«Здравствуйте, уважаемый пользователь!»);
System.out.print(«Введите количество чиcел N, (N > 0) = «);
int total = con.nextInt();
int signChangeCounter = 0;
boolean prevIsNegative = false;
for (int i = 0; i < total; i++) System.out.print("Введите число № " + (i + 1) + ": ");
int parsed = con.nextInt();
boolean curIsNegative = parsed < 0;
if (i == 0) prevIsNegative = curIsNegative;
> else if (prevIsNegative != curIsNegative) signChangeCounter++;
>
>
>
Профиль
Группа: Участник
Сообщений: 93
Регистрация: 23.4.2011
Профиль
Группа: Участник
Сообщений: 93
Регистрация: 23.4.2011
Код |
Введите количество чиcел N, (N > 0) = 7 Введите число № 1: -5 Введите число № 2: -2 Введите число № 3: 9 Введите число № 4: 1 Введите число № 5: 0 Введите число № 6: 4 Введите число № 7: -3 Количество смен знака в последовательности: 4 BUILD SUCCESSFUL (total time: 39 seconds) |
(например, в последовательности –5, –2, 9, 1, 0, 4, –3 знак меняется дважды: с минуса на плюс, затем с плюса на минус).
Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara
Прошу прощения. Глупейшая ошибка
Код |
public class SignsReader |
public static void main(String[] args) Scanner con = new Scanner(System.in);
System.out.println(«Здравствуйте, уважаемый пользователь!»);
System.out.print(«Введите количество чиcел N, (N > 0) = «);
int total = con.nextInt();
int signChangeCounter = 0;
boolean prevIsNegative = false;
for (int i = 0; i < total; i++) System.out.print("Введите число № " + (i + 1) + ": ");
int parsed = con.nextInt();
boolean curIsNegative = parsed < 0;
if (i != 0) if (prevIsNegative != curIsNegative) prevIsNegative = curIsNegative;
signChangeCounter++;
>
> else prevIsNegative = curIsNegative;
>
>
Профиль
Группа: Участник
Сообщений: 93
Регистрация: 23.4.2011
Код |
boolean curIsNegative = parsed < 0; |
Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.10.2008
Где: Russia, Samara
Суть в следующем:
Есть два флага curIsNegative и prevIsNegative. Первый указывает на то является ли текущее введенное число отрицательным, второй, соответственно, указывает на отрицательность предыдущего введенного значения. На первой итерации цикла выполняется операция prevIsNegative = curIsNegative, по скольку предыдущих значений у нас ещё нет. На последующих итерациях происходит сравнение флагов и в случае их неравенства, это и означает что знак был изменен. А если знак был изменен, то, происходит инкремент счетчика.
Профиль
Группа: Участник
Сообщений: 93
Регистрация: 23.4.2011
frikey,
Спасибо Вам большое за Помощь.
Если Вам не сложно, помогите Пожалуйста решить ещё одну задачу, выложенную мной в этом разделе!
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!
- Название темы должно отражать её суть! (Не следует добавлять туда слова «помогите», «срочно» и т.п.)
- При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
- В названии темы не нужно указывать происхождение задачи (например «школьная задача», «задача из учебника» и т.п.), не нужно указывать ее сложность («простая задача», «легкий вопрос» и т.п.). Все это можно писать в тексте самой задачи.
- Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
- Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку «Код»). Не забывайте выбирать при этом соответствующий язык.
- Помните: один топик — один вопрос!
- В данном разделе запрещено поднимать темы , т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
- Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
- Если вопрос решён, то воспользуйтесь ссылкой «Пометить как решённый», которая находится под кнопками создания темы или специальным флажком при ответе.
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
Как поменять знак числа java
Чтобы поменять знак числа на противоположный, в Java можно использовать унарный оператор — . Для примера напишем метод, который будет менять знак числа на противоположный:
class App public static int changeSign(int num) return -num; > >
App.changeSign(-5); // 5 App.changeSign(7); // -7 App.changeSign(); // 0
Как сделать число отрицательным java
Чтобы сделать число отрицательным в Java , можно использовать знак минус перед числом или умножить число на -1.
int number = 10; // делаем число отрицательным number = -number; System.out.println(number); // => -10 // альтернативный способ int number2 = 5; number2 = -1 * number2; System.out.println(number2); // => -5
Если число уже отрицательное, то можно просто использовать его со знаком минус:
int negativeNumber = -10; System.out.println(negativeNumber); // => -10
Унарные операторы в Java
Уже завтра в OTUS скоро стартует новая профессиональная программа по подготовке к сертификации Oracle Java Programmer (OCAJP). Предлагаем вам посмотреть запись бесплатного Demo-урока «Типы данных Java: Идентификаторы и примитивы» и продолжаем публиковать серию статей Владислава Родина — руководителя группы разработки, преподавателя в МФТИ и foxminded.
Введение
Сертификация OCA (Oracle Certified Associate Java SE8 Programmer) предлагает ряд необычных заданий, проверяющих глубокое понимание принципов работы языка программирования Java. Целый блок посвящен выражениям, циклам и операторам. Про последние мы сегодня и поговорим.
Приоритет операторов
Оператор принимает на вход аргументы и возвращает некоторые значения. Выделяют унарные, бинарные и тернарные операторы. Например, !false — унарный, a + b — бинарный, а? : — является единственным оператором, принимающим на вход три аргумента.
Первое, что необходимо помнить, это приоритет выполнения операторов:
- Пост-унарные операторы: exception++ и exception—
- Пре-унарные операторы: ++exception и —exception
- Остальные унарные операторы: +, -, !
- Умножение, деление, взятие остатка: *, /, %
- Сложение и вычитание: +, —
- Операторы битового сдвига: >, >>>
- Операторы сравнения: , =, instanceof
- Операторы равенства-неравенства: ==, !=
- Логические операторы: &, |, ^
- Short-circuit логические операторы: &&, ||
- Тернарный оператор: boolean expression? expression1: expres-
sion2 - Операторы присваивания: =, +=, -=, *=, /=, %=, &=, ^=, !=, <>=, >>>=
Работа с унарными операторами
Про бинарные операторы мы говорили в прошлый раз. Сегодня обсудим унарные операторы, что следует из названия статьи. На экзамене могут предлагать достаточно сложные выражения для вычисления которых необходимо помнить порядок их выполнения.
Операторы смены знака и логической инверсии
Оператор логической инверсии ! применяется только к переменным типа boolean и превращает значение из true в false и наоборот. Например:
boolean x = false; System.out.println(x); // false x = !x; System.out.println(x); // true
Оператор смены знака — применяется только к числам и меняет знак на противоположный:
double x = 1.21; System.out.println(x); // 1.21 x = -x; System.out.println(x); // -1.21 x = -x; System.out.println(x); // 1.21
Java в отличии от того же C четко разделяет целочисленные типы данных и boolean, в связи с чем применение оператора смены знака к boolean либо же применение оператора логической инверсии приводят к ошибкам компиляции:
int x = !5; // DOES NOT COMPILE boolean y = -true; // DOES NOT COMPILE boolean z = !0; // DOES NOT COMPILE
Операторы инкремента и декремента
Операторы инкремента ++ и декремента — применяются к целочисленным переменным и обладают двумя вариациям: post-инкремент (декремент) и pre-инкремент (декремент), в коде i++ (i—) и ++i (—i) соответственно. Разница между вариациями в том, что ++i увеличивает переменную и возвращает новое значение, а i++ возвращает старое значение, а только затем увеличивает переменную. Разницу более наглядно можно увидеть в таком куске кода:
int counter = 0; System.out.println(counter); // Outputs 0 System.out.println(++counter); // Outputs 1 System.out.println(counter); // Outputs 1 System.out.println(counter--); // Outputs 1 System.out.println(counter); // Outputs 0
На экзамене могут предлагаться различные хитрые задания, где таких операторов вагон и маленькая тележка. Например, может быть предложено такое задание.
Что будет выведено в результате выполнения данной программы?
int x = 3; int y = ++x * 5 / x-- + --x; System.out.println("x is " + x); System.out.println("y is " + y);
Проблема заключается в том, что x меняется несколько раз в одной строке.
Для решения таких задач можно разбирать выражение слева направо, подставляя в выражение то, что возвращают операторы, и фиксируя отдельно значение изменяемой переменной. Например, вот так:
int y = 4 * 5 / x-- + --x; // x assigned value of 4 int y = 4 * 5 / 4 + --x; // x assigned value of 3 int y = 4 * 5 / 4 + 2; // x assigned value of 2
Как видите, применяются все обозначенные выше правила применения операторов. В результате выведено будет следующее: