как получить входное значение с сортировкой, я сделал сортировку наибольший простой коэффициент [дубликат]

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

1
задан Karthik Kumar 11 December 2017 в 17:15
поделиться

2 ответа

Ниже приведен обновленный предыдущий ответ для выхода на вход.

#include <stdio.h>
#define MAX 100

int main()
{
    int n, i, array[MAX];
    char num[MAX];
    int res;

    printf("Enter a list of integers [ctrl+d] to end\n");

    for(i = 0; i <= MAX; ++i){
        printf("> ");
    fgets(num, sizeof(num), stdin);
    res = sscanf(num, "%d", &n);
    if(res != 1)
     break;
    n = atoi(num);
        array[i] = n;
    }
    puts ("");

    int z;
    for (z = 0; z < i; z++)
        printf("The array is %d\n", array[z]);

    return 0;
}
1
ответ дан user207064 15 August 2018 в 20:14
поделиться

У вас есть то, что вы хотите, вам просто нужно несколько настроек. Во-первых, enter не возвращает -1, чтобы сохранить его просто, вам нужно ввести ctrl+d, чтобы остановить ввод. После вашего окончательного ввода просто нажмите ctrl+d. Взгляните:

#include <stdio.h>
#define MAX 100

int main()
{
    int n, i, array[MAX];

    printf("Enter a list of integers [ctrl+d] to end\n");

    for(i = 0; i <= MAX; ++i){
        printf("> ");
        if (scanf("%d", &n) == -1)
            break;
        array[i] = n;
    }
    puts ("");

    int z;
    for (z = 0; z < i; z++)
        printf("The array is %d\n", array[z]);

    return 0;
}

вывод:

Enter a list of integers [ctrl+d] to end
> 1
> 2
> 3
> 4
> 5
>
The array is 1
The array is 2
The array is 3
The array is 4
The array is 5
2
ответ дан David C. Rankin 15 August 2018 в 20:14
поделиться
  • 1
    Как вы обнаружите клавишу Enter (т. Е. Введите пустую строку)? Я пытался написать ответ для этого, но я застрял в том, как это обнаружить. – Zev Eisenberg 29 May 2014 в 04:10
  • 2
    Спасибо за ответ. Пара вопросов. 1. Что там puts("") делает? 2. Могу ли я сделать печать массива на одной строке, например The array is 1, 2, 3, 4, 5? Кроме того, вещь enter очень важна. Еще раз спасибо. – Rich Scriven 29 May 2014 в 04:13
  • 3
    Это немного сложнее. Вам нужно посмотреть kbhit(), который является общим именем для процедуры ввода с помощью struct termios, чтобы поместить клавиатуру в режим raw-unbufferd, чтобы вы могли принимать каждое нажатие клавиши без возврата. Затем вы можете проверить, нажата ли клавиша ввода (unsigned int 10). – David C. Rankin 29 May 2014 в 04:16
  • 4
    puts("") был просто взломан, чтобы заставить новую строку без вахрирования синтаксического анализа printf. Это была не соответствующая часть ответа. Я не пытался сопоставить отображаемый формат вывода. Похоже, что OP больше беспокоился о том, как работать с массивом. – David C. Rankin 29 May 2014 в 04:18
  • 5
    @RichardScriven, если вас интересует пример kbhit, вот пример источника, называемый keypress2.c – David C. Rankin 29 May 2014 в 04:24
Другие вопросы по тегам:

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