Как выбрать первого потомка определенного типа с помощью CSS Selector в сложном HTML

Это действительно озадачило меня какое-то время, но это то, что я нашел в конце.

Когда вы вызываете sc.close() в первом методе, он не только закрывает ваш сканер, но и закрывает ваш System.in. Вы можете проверить его, напечатав его статус в верхней части второго метода как:

    System.out.println(System.in.available());

Итак, теперь, когда вы повторно создаете экземпляр Scanner во втором методе, он не находит открытого System.in и, следовательно, исключение.

Я сомневаюсь, что есть какой-либо выход для повторного открытия System.in, потому что:

public void close() throws IOException --> Closes this input stream and releases any system resources associated with this stream. The general contract of close is that it closes the input stream. A closed stream cannot perform input operations and **cannot be reopened.**

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

main связанный с кодом кодовый блок :

Scanner scanner = new Scanner(System.in);  

// Ask users for quantities 
PromptCustomerQty(customer, ProductList, scanner );

// Ask user for payment method
PromptCustomerPayment(customer, scanner );

//close the scanner 
scanner.close();

Ваши методы:

 public static void PromptCustomerQty(Customer customer, 
                             ArrayList<Product> ProductList, Scanner scanner) {

    // no more scanner instantiation
    ...
    // no more scanner close
 }


 public static void PromptCustomerPayment (Customer customer, Scanner sc) {

    // no more scanner instantiation
    ...
    // no more scanner close
 }

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

-2
задан JeffC 11 March 2019 в 19:18
поделиться

3 ответа

Если ваши входные данные аналогичны вашему примеру, вы можете использовать first-child:

#root input:first-child {
  border-color:red;
}
<div id="root">
    <header>
        <h1>Hello World</h1>
    </header>
    <div>
        <div>
            <form>
                <input value="First Name">
                <input value="Last Name">
            </form>  
        </div>
    </div>
</div>

[1125 ] Более подробная информация о:

Если ваш HTML немного сложнее, но все входные данные все еще являются родными, то вы можете попробовать first-of-type:

[112 ]
<div id="root">
    <header>
        <h1>Hello World</h1>
    </header>
    <div>
        <div>
            <form>
                <div>some other elements</div>
                <input value="First Name">
                <div>some other elements</div>
                <input value="Last Name">
                <div>some other elements</div>
            </form>  
        </div>
    </div>
</div>

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

] Больше информации о:

Другие полезные ссылки:

Некоторые полезные рецепты nth-child .

0
ответ дан Ratmir Asanov 11 March 2019 в 19:18
поделиться

Не уверен, что ты этого хочешь. Это выбирает первый входной дочерний внутренний #root.

#root input:nth-of-type(1) { 
    background: red;
}

Или вы хотите выбрать вход со значением «Имя»?

#root input[value="First Name"] {
    background: red;
}
0
ответ дан d-h-e 11 March 2019 в 19:18
поделиться

Чтобы выбрать вход со значением «Фамилия», используйте ниже селектор CSS.

#root input[value="Last Name"] {
    background: red;
}

где root - это идентификатор div, а input - тег со значением = «Фамилия»

0
ответ дан Bathri Nathan 11 March 2019 в 19:18
поделиться