Каков приоритет оператора объединения пустого указателя C# (??) оператор?

Вы можете использовать цикл while, как показано ниже, и когда пользователь вводит 2, прервите его

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

public class Main {
    public static void addiePorterMod8Banking (String args[]) {
        while (true) {
            int depositSavings, depositChecking, withdrawalSavings, withdrawalChecking, transferSavingsToChecking;
            int b, c, d, e, f, g, lp;
            int savingsaccount = 3000;
            int checkingaccount = 650;
            Scanner kbReader = new Scanner(System.in);
            System.out.println("What do you wish to do today?\n1 for deposit to savings\n2 for deposit to checking\n3 for withdraw from savings\n4 for withdraw from checking\n5 for transfer funds from savings to checking");
            int a = kbReader.nextInt();
            if (a == 1) {
                System.out.println("1-you chose to make a deposit to savings. How much would you like to deposit?");
                int answer = kbReader.nextInt();
                lp = savingsaccount + answer;
                System.out.println("Your total in savings is $" + lp);
            }
            if (a == 2) {
                System.out.println("2-you chose to make a deposit to checking. How much would you like to deposit?");
                int answer = kbReader.nextInt();
                lp = checkingaccount + answer;
                System.out.println("Your total in checking is $" + lp);
            }
            if (a == 3) {
                System.out.println("3-you chose to withdraw from savings. How much would you like to withdraw?");
                int bunny = kbReader.nextInt();
                lp = savingsaccount - bunny;
                System.out.println("Your total in savings is $" + lp);
            }
            if (a == 4) {
                System.out.println("4-you chose to withdraw from checking. How much would you like to withdraw?");
                int bubble = kbReader.nextInt();
                lp = checkingaccount - bubble;
                System.out.println("Your total in checking is $" + lp);
            }
            if (a == 5) {
                System.out.println("5-Your current balance in savings is $3000. How much would you like to transfer?");
                int awesome = kbReader.nextInt();
                lp = savingsaccount - awesome;
                int al = checkingaccount + awesome;
                System.out.println("Your total in checking is $" + al + "." + "Your total in savings is $" + lp + ".");
            }
            System.out.println("Would you like another transaction? 1 for yes. 2 for No");
            int more = kbReader.nextInt();

            if (more == 2) {
                break;
            }
        }
    }
}
19
задан Abel 19 March 2012 в 12:01
поделиться

4 ответа

Кроме того, чем Вы были бы как приоритет, чтобы быть, что это согласно ECMA, что это согласно спецификации MS и что на самом деле делает csc, у меня есть один совет:

не делают этого .

я думаю, что это очень более ясно для записи:

string c = (a ?? "") + (b ?? "");

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

string c = a + b;

РЕДАКТИРОВАНИЕ: Относительно зарегистрированного приоритета, в обоих спецификация C# 3.0 (документ Word) и ECMA-334, дополнение связывает более трудный, чем??, который связывает более трудный, чем присвоение. Ссылка MSDN, данная в другом ответе, является просто неправильной и причудливой, IMO. Существует изменение, показанное на странице, сделанной в июле 2008, который переместил условный оператор - но по-видимому неправильно!

36
ответ дан 30 November 2019 в 02:45
поделиться

Приоритет оператора документируется на MSDN.

Однако приоритет на MSDN противоречит приоритету и в загружаемая спецификация C# также от Microsoft, и в спецификация на ECMA. Который немного нечетен.

Безотносительный, как Jon Skeet сказал в своем ответе, лучше всего чтобы не полагаться на приоритет операторов, но быть явным посредством использования скобок.

5
ответ дан 30 November 2019 в 02:45
поделиться

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

(a ?? "") + (b ?? "")

Это не оставляет места для неоднозначности. Неоднозначность является благоприятной почвой ошибок.

5
ответ дан 30 November 2019 в 02:45
поделиться

Это интересный, что http://msdn.microsoft.com/en-us/library/6a71f45d.aspx и http://en.csharp-online.net/ECMA-334:_14.2.1_Operator_precedence_and_associativity дает другой приоритет??.

MSDN:

  1. Условное выражение
  2. Присвоение
  3. Объединение пустого указателя
  4. Лямбда

ECMA:

  1. Пустой указатель, Объединяющий
  2. Условное выражение
  3. Присвоение

, я думаю, что MSDN должен быть неправильным, рассмотреть:

string a = null;
string b = a ?? "foo";
// What is b now?
2
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: