Loading...
nedjo avatar nedjo 53 Точки

[Technical Issue] Java Basics - Sort Array of Strings

Здравейте.

Някой може ли да погледне кода http://pastebin.com/bYnYcdgN и да ми обясни защо при въвеждане на n=5(примерно) ми дава да въведа 4 стринга. В кода не виждам някакъв проблем. Проблема може ли да е в Еклипса и ако е как да си го настроя. Пробвах с дебъгера и винаги първият стринг ми е NULL. Не можах да разбера защо и как си го създава.

Тагове:
0
Java Advanced 01/09/2014 18:06:24
Pavel_R avatar Pavel_R 57 Точки

Здравей. Пробвай вместо int n = scn.nextInt() да използваш int n = Integer.valueOf(scn.nextLine()). Проблема в твоя код идва от това, че след като кажеш nextInt при пъравата итерация на for цикъла чете остатъка от реда след числото n (a той е празен ), а не числото на следващия ред. 

1
Valleri avatar Valleri 304 Точки

Добави "scn.nextLine();" след int n=scn.nextInt();
Проблема идва от буфера на Scanner. Поне аз си го обяснявам така - след като натиснеш ентер при първата променлива 'n' този return character, които си набил се хваща от първото минаване в loopa и после имаш само още 4 входа : ) дали е така не знам.

1
nedjo avatar nedjo 53 Точки

По този начин се получи. Постоянно трябва да следим преди да започнем цикъл да затваряме реда или има и някакъв друг начин?

0
Valleri avatar Valleri 304 Точки

Ами зависи от случая, трябва да се внимава. Но като имаш едно наум за новите редове, общо взето ще знаеш ако излезе проблем къде да пипаш.

0
VenelinGrozev avatar VenelinGrozev 130 Точки

Ето тук е обяснено защо се получава така - http://stackoverflow.com/questions/3236830/scanner-in-java-not-working

Първо търсиш NextInt() и маркера бива позициониран на на реда за въвеждане на число int. След това искаш да вземеш следващият стринг но тъй като маркера се намира все още на реда за въвеждане на int, а NextLine() връща остатъка до края на реда, резултатът е празен стринг ("").

Със str[i]=scn.next(); ще работи. Вчера и аз се чудех защо се получава така.

Това е API-то на nextLine() - http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine%28%29

2
cvetant avatar cvetant 75 Точки

след int n=scn.nextInt(); сложи

scn.nextLine();

Така ще минеш на нов ред и ще ееминираш този често срещан проблем.

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