Все возможные значения интервала от самого маленького до самого большого, использующего Java

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

 // Store the username after login
 document.cookie = "msal_username=Paul@xyz-corp.com;domain=.xyz-corp.com;path=/"

 // use the username
 var username = getCookieByName("msal_username"); // find some code to do that
 userAgentApplication.loginRedirect(scopes, "&login_hint=" + username);

Недостатком этого является то, что вам необходимо реализовать это в во всех ваших приложениях.

Приложения в другом домене

Когда приложения размещены в разных доменах, MSAL.js не может получить доступ к токенам, кэшированным в домене A, в домене B.

Автоматически выбирать учетную запись в Azure AD

...

Использование подсказки для входа в систему

Если у вас нет настроенного утверждения SID или вам необходимо пропустить запрос на выбор учетной записи при интерактивных вызовах аутентификации, вы можете сделать это, указав login_hint и, при необходимости, domain_hint как extraQueryParameters в интерактивных методах MSAL.js (loginPopup, loginRedirect, acquTokenPopup и acquTokenRedirect). Например:

userAgentApplication.loginRedirect(scopes, "&login_hint=&domain_hint=organizations");

Вы можете получить значения для login_hint и domain_hint, прочитав утверждения, возвращенные в токене ID для пользователя.

Для логина логина должно быть указано утверждение предпочитаемого имени пользователя в маркере идентификатора.

BLOCKQUOTE>

7
задан Community 23 May 2017 в 10:33
поделиться

13 ответов

А, и вот я только что начал писать

System.out.println(-2147483648);
System.out.println(-2147483647);
System.out.println(-2147483646);

Ладно, дайте мне несколько недель, чтобы закончить набирать это ...

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

4
ответ дан 6 December 2019 в 04:46
поделиться

Учитывая обзор лучших ответов, я понял, что у нас серьезно не хватает в отделе грубой силы. Ответ Джея хорош, но на самом деле это не сработает. От имени Science я представляю - Bozo Range:

import java.util.Random;
import java.util.HashSet;

class Test {
    public static void main(String[] args) {
        Random rand = new Random();
        HashSet<Integer> found = new HashSet<Integer>();
        long range = Math.abs(Integer.MAX_VALUE - (long) Integer.MIN_VALUE);
        while (found.size() < range) {
            int n = rand.nextInt();
            if (!found.contains(n)) {
                found.add(n);
                System.out.println(n);
            }
        }
    }
}

Обратите внимание, что вам нужно выделить как минимум 4 ГБ ОЗУ для запуска этой программы. (Возможно, 8 ГБ, если вы работаете на 64-битной машине, что вам, вероятно, потребуется для запуска этой программы ...). Этот анализ не учитывает раздувание, которое класс Integer добавляет к какому-либо данному int, ни размер самого HashSet.

2
ответ дан 6 December 2019 в 04:46
поделиться

Простейшая форма (минимальный код):

    for (long i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++) {
        System.out.println(i);
    }

Без целочисленного переполнения, без дополнительных проверок (только немного больше использования памяти, но у кого нет 32 запасных бита).

Хотя я полагаю, что в

    for (long i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++)
        System.out.println(i);

меньше символов, я не могу сказать, что он проще . Короче не обязательно проще, но в нем меньше кода.

14
ответ дан 6 December 2019 в 04:46
поделиться

I just have to add an answer...

public class PrintInts {
    public static void main(String[] args) {
        int i = Integer.MIN_VALUE;
        do {
            System.out.println(i);
            ++i;
        } while (i != Integer.MIN_VALUE);
    }
}
  • We don't want the body repeated (think of the maintenance!)
  • It doesn't loop forever.
  • It uses an appropriate type for the counter.
  • It doesn't require some wild third-party weirdo library.
8
ответ дан 6 December 2019 в 04:46
поделиться

Когда я впервые посмотрел на это, первым моим вопросом было: «Как определить наименьшее и наибольшее». Для того, что я считал наиболее очевидным определением («наименьший» == «ближайший к 0»), ответ будет

for (int i = 0; i >= 0; i++) {
    System.out.println(i);
    System.out.println(-i-1);
}

Но все остальные, кажется, читают «наименьший» как «минимум» и «наибольший» как «максимум»

3
ответ дан 6 December 2019 в 04:46
поделиться

Пакет fj взят из здесь .

import static fj.pre.Show.intShow;
import static fj.pre.Show.unlineShow;
import static fj.data.Stream.range;
import static java.lang.Integer.MIN_VALUE;
import static java.lang.Integer.MAX_VALUE;

public class ShowInts
  {public static void main(final String[] args)
     {unlineShow(intShow).println(range(MIN_VALUE, MAX_VALUE + 1L));}}
1
ответ дан 6 December 2019 в 04:46
поделиться

При скорости 1000 строк в секунду вы сделаете примерно за 7 недель. Может, нам сейчас кофе?

0
ответ дан 6 December 2019 в 04:46
поделиться

Просто немного улучшив подход StringBuilder :

2 потока + 2 буфера (например, StringBuilder ): Основная идея заключается в том, что один поток заполняет один буфер, в то время как другой поток выгружает содержимое другого буфера.

Очевидно, что поток «дампера» всегда будет работать медленнее, чем поток «заполнитель».

0
ответ дан 6 December 2019 в 04:46
поделиться
class Test {
    public static void main(String[] args) {
        for (int a = Integer.MIN_VALUE; a < Integer.MAX_VALUE; a++) {
            System.out.println(a);
        }
        System.out.println(Integer.MAX_VALUE);
    }
}

Меня наняли?

15
ответ дан 6 December 2019 в 04:46
поделиться

Да ладно, ребята, он сказал, что с использованием java. Он не сказал использовать int в цикле for. : -)

public class Silly {
  public static void main(String[] args) {
    for (long x = Integer.MIN_VALUE; x <= Integer.MAX_VALUE; x++) {
      System.out.println(x);
    }
  }
}
3
ответ дан 6 December 2019 в 04:46
поделиться

Есть что-то сложное, чего я не улавливаю? Вероятно, есть ... ( edit: да, есть!)

class AllInts {
    public static void main(String[] args) {
        // wrong -- i <= Integer.MAX_VALUE will never be false, since
        // incrementing Integer.MAX_VALUE overflows to Integer.MIN_VALUE.
        for (int i = Integer.MIN_VALUE; i <= Integer.MAX_VALUE; i++) {
            System.out.println(i);
        }
    }
}

Поскольку печать является узким местом, буфер значительно повысил бы скорость (я знаю, потому что только что попробовал):

class AllInts {
    public static void main(String[] args) {
        // a rather large cache; I did no calculations to optimize the cache
        // size, but adding the first group of numbers will make the buffer
        // as large as it will ever need to be.
        StringBuilder buffer = new StringBuilder(10000000);
        int counter = 0;
        // note that termination check is now <
        // this means Integer.MAX_VALUE won't be printed in the loop
        for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) {
            buffer.append(i).append('\n');
            if (++counter > 5000000) {
                System.out.print(buffer);
                buffer.delete(0, buffer.length()-1);
                counter = 0;
            }
        }
        // take care of the last value (also means we don't have to check
        // if the buffer is empty before printing it)
        buffer.append(Integer.MAX_VALUE);
        System.out.println(buffer);
    }
}

Кроме того, эта версия фактически прекратит работу (спасибо Дэниелу Лью за указание на то, что на самом деле была кое-что сложное, чего я не заметил).

Общее время выполнения этой версии (запускается с -Xmx512m ) было 1:53. Это более 600000 номеров в секунду; совсем неплохо! Но я подозреваю, что это было бы медленнее, если бы я не запустил его в свернутом виде.

4
ответ дан 6 December 2019 в 04:46
поделиться

Another way to loop through every value using an int type.

public static void main(String[] args) {
    int i = Integer.MIN_VALUE;
    do {
        System.out.println(i);
    } while (i++ < Integer.MAX_VALUE);
}
3
ответ дан 6 December 2019 в 04:46
поделиться

Максимальное значение для int - Integer.MAX_VALUE , а минимальное - Integer.MIN_VALUE . Используйте цикл, чтобы распечатать их все.

2
ответ дан 6 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

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