Loading...
a.polyanska avatar a.polyanska 107 Точки

[Technical Issue] Java Basics - Каква е разликата между next() и nextLine()?

Здравейте,

Прочетох из нета за разликите между двата метода. Очевидно, обаче, не схващам нещо, защото не мога да разбера защо, когато решавам задачата и използвам next() ми се получава, а с nextLine() излизат неща, които не искам :) Става дума за задачата от домашното към Intro to Java за сортиране на масиви (задача 8)(да се зададат определен брой думи от конзолата и програмата да ги сортира по азбучен ред). Ето го кодът, който пиша:

import java.util.*;

public class Problem08_SortArrayOfStrings {
    
    public static void main(String[] args){
        int n;

        Scanner input = new Scanner(System.in);
        System.out.print("Enter a number n: ");
        n = input.nextInt();
        
        String[] words = new String[n];
        
        for (int i = 0; i < n; i++) {
            System.out.print("Enter a word: ");
            words[i] = input.nextLine();        
        }
        Arrays.sort(words);
        
        System.out.println(Arrays.toString(words));
    }
}

Когато по този начин е зададено да се пълни масивът от конзолата, ми излиза два пъти един след друг написано "Enter a word", с възможност да се впише само един стринг, след което след сортирането винаги първото място в новия масив е празно:

Enter a number n: 3
Enter a word: Enter a word: abc
Enter a word: cde
[, abc, cde]

Когато заменя nextLine с next няма проблем и работи коректно. Не разбирам, обаче, защо. Някой може ли да ми обясни?

Тагове:
1
Java Advanced 15/09/2014 21:55:20
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Другият вариант е вместо nextInt() да използваш Integer.parseInt(input.nextLine());

4
05/09/2014 23:35:45
Filkolev avatar Filkolev 4482 Точки

Това е май най-чистият вариант. Само че трябва да се внимава на реда да се въведе само числото, защото всякакви спейсове ще изгърмят.

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Винаги може да се използва .trim()

Integer.parseInt(input.nextLine().trim())

 

0
06/09/2014 10:10:33
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.