#java #arrays #for-loop
#java #массивы #for-цикл
Вопрос:
Циклы for в приведенном ниже коде сначала перебирают записи пользователя, а затем проверяют количество пробелов » » в строке. После проверки через них задается вопрос, хотят ли они отображать строки без пробелов, один или более. Я не думаю, что цикл проходит мимо первого экземпляра цикла for, поскольку второй должен искать значение 0 в переменной count . Ниже приведены вложенные циклы for:
if(answer.equals("No")){
for (int i = 0; i < array.length;i ) {
if (array[i] != null) {
for (int count = 0; array[i].charAt(i) != ' ';count ) {
if(count == 0)
System.out.println(array[i] " ");
}
}
}
}
Основной код для справки:
import java.util.*;
import java.util.Scanner;
public class StringsWithSpaces {
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
String[] array = new String[20];
System.out.println("Please enter anything..., or type QUIT to quit.");
for (int i = 0; i < array.length; i ) {
array[i] = s.nextLine();
boolean result = Arrays.stream(array).anyMatch("QUIT"::equals);
if(result)
{
break;
}
}
String str = null;
int len = -1;
System.out.println("Would you like to display strings with No Spaces, One Space or More? Type No, One, More to see the results: ");
String answer = s.nextLine();
if(answer.equals("No")){
for (int i = 0; i < array.length;i ) {
if (array[i] != null) {
for (int count = 0; array[i].charAt(i) != ' ';count ) {
if(count == 0)
System.out.println(array[i] " ");
}
}
}
}
else if(answer.equals("One"))
{
for (int i = 0; i < array.length;i ) {
int count = 0;
if (array[i] != null) {
if (array[i].charAt(i) != ' ') {
count ;
System.out.println(count);
}
//System.out.print(array[i] " ");
}
}
}
else
System.out.println("No values to show");
System.out.println();
}
}
Я искал что-то подобное, но мог найти только другие языки. Спасибо за всю помощь.
Ответ №1:
В первом наборе вложенных циклов вы в основном проверяете один и тот же символ каждого слова каждый раз. Вы должны использовать count в качестве параметра для метода charAt вместо любого индекса в i; Также вы должны выводить слово только тогда, когда count равен длине слова минус один.
Вот оно:
if(answer.equals("No")){
for (int i = 0; i < array.length;i ) {
if (array[i] != null) {
for (int count = 0; array[i].charAt(i) != ' ' ;count ) {
if(count == array[i].length()-1) {
System.out.println(array[i]);
break;
}
}
}
}
}
Я также переписал второй набор вложенных циклов, он должен объясниться:
else if(answer.equals("One"))
{
for (int i = 0; i < array.length;i ) {
int count = 0;
for (int j = 0; j < array[i].length(); j ) {
if (Character.isSpaceChar(array[i].charAt(j)))
count ;
}
if (count == 1) {
System.out.println(array[i]);
}
}
}
РЕДАКТИРОВАТЬ: я забыл упомянуть, что я добавил оператор break, который вы забыли. Это гарантирует, что цикл for завершается, когда вы достигаете последнего символа в строке. Без этого оператора ваше приложение будет аварийно завершать работу каждый раз, когда оно попадает в конец строки из-за исключения IndexOutOfBoundsException .