Как принимать строку в качестве входных данных с помощью сканера, когда ввод имеет форму (ниже)?

#java #string

#java #строка

Вопрос:

Ввод:

 abc

def

feg

cba
  

Это то, что я делаю, конечно, неправильно!

 import java.util.Scanner;

public class P {

    public static void main(String []args){
        Scanner x = new Scanner(System.in);
        int t = x.nextInt();

        for (int j=0; j<t; j  ) {
            String p[j] = x.nextLine();
        }

        for (j=0; j<p.length(); j  ) {
            for (k=0; k<p.length(); k  ) {
                if (p[j] = reverse(p[k])) {
                    int q = p[k].length();
                    System.out.println("" q ((q/2) 1));
                }
            }
        }
    }
}
  

Комментарии:

1. в чем ваша проблема? вы пытаетесь ввести строку вместо int ?

2. Я предполагаю, что сначала должно быть введено несколько строк?

3. Не могли бы вы уточнить свою проблему? Это не дает нам никакого представления о том, что вы пытаетесь сделать.

4. о, да, перед строкой есть int, его 4 … извините

5. и в чем ваша проблема?

Ответ №1:

Сообщение об ошибке, которое вы написали, связано с этим кодом:

 for (int j=0; j<t; j  ) {
    String p[j] = x.nextLine();
}
  

Если вы хотите создать массив строк, вот как вы это делаете:

 String[] p = new String[t];
  

Он также должен быть объявлен вне вашего for-цикла. Я предлагаю что-то вроде этого:

 public static void main(String []args){
    Scanner x = new Scanner(System.in);
    int t = x.nextInt();
    String[] p = new String[t];

    for (int j = 0; j < t; j  ) {
        p[j] = x.nextLine();
    }

    for (j=0; j<p.length(); j  ) {
        ...
    }
}
  

Новый код, который вы опубликовали:

 Scanner x = new Scanner(System.in);
int t = x.nextInt();
String p[] = new String[n];

for (int j = 0; j < t; j  ) {
    p[j] = x.nextLine();
}

for (j = 0; j < p.length(); j  ) {
    for(k = 1; k < p.length(); k  ) {
        if (p[j] = reverse(p[k])) {
            int q = p[k].length();
            System.out.println("" q ((q/2) 1));
        }
  

Со всеми исправлениями, которые я прокомментировал, ваш код должен выглядеть следующим образом:

 Scanner x = new Scanner(System.in);
int t = x.nextInt();
String[] p = new String[t];

for (int j = 0; j < t; j  ) {
    p[j] = x.nextLine();
}

for (int j = 0; j < p.length(); j  ) {
    for (int k = 1; k < p.length(); k  ) {
        if (p[j] = reverse(p[k])) {
            int q = p[k].length();
            System.out.println(""   q   ((q / 2)   1));
        }
    }
}
  

Комментарии:

1. Теперь я получаю что-то еще: Scanner x = новый сканер (System.in ); int t=x.nextInt(); Строка p[]=новая строка[n]; for(int j=0;jnextLine(); } for(j= 0;jp[k].length(); System.out.println(«» q ((q / 2) 1)); }

2. 11: ошибка: n не может быть разрешен 15: ошибка: j не может быть разрешен 15: ошибка: j не может быть разрешен 15: ошибка: не удается вызвать length() для типа массива String[] 15: ошибка: j не может быть разрешен 16: ошибка: k не может быть разрешен 16: ошибка:k не может быть разрешен 16: ошибка: не удается вызвать функцию length() для типа массива String[] 16: ошибка: k не может быть разрешен 17: ошибка: j не может быть разрешен 17: ошибка: метод reverse(String) не определен для типа P 17: ошибка: k не может быть разрешен17: ошибка: k не может быть разрешен

3. n In String[] p = new String[n]; должен быть an int . Итак, что-то вроде int n = 10; , или вы можете использовать число напрямую. Итак String[] p = new String[10];

4. Также важно, чтобы вы писали String[] p = ...; , а не String p[] = ...; (поэтому эти [] идут сразу после строки)

5. И во втором цикле for вам нужно убедиться, что вы пишете int j = 0; , а не просто j = 0;

Ответ №2:

на первый взгляд кажется, что ваша область видимости отключена. Переменная p в

 for (int j=0; j<t; j  ) {
        String p[j] = x.nextLine();
    }
  

объявляется, а затем немедленно отбрасывается. Вы, вероятно, хотите что-то вроде

     String[] p = new String[t];
    for (int j=0; j<t; j  ) {
        p[j] = x.nextLine();
    }
  

аналогично с q в цикле ниже

     int q = 0;
    for (int j=0; j<p.length; j  ) {
        for (int k=0; k<p.length; k  ) {
            if (p[j] = reverse(p[k])) {
                q = p[k].length();
                System.out.println("" q ((q/2) 1));
            }
        }
    }
  

Надеюсь, это помогло.

дополнительная информация о области видимости переменных в Java:

область действия переменной

Комментарии:

1. Пожалуйста, проверьте, что теперь делать? Я получаю следующее: 11: ошибка: n не может быть разрешен 15: ошибка: j не может быть разрешен 15: ошибка: j не может быть разрешен 15: ошибка: не удается вызвать length() для типа массива String[] 15: ошибка: j не может быть разрешен 16: ошибка: k не может быть разрешенрешаемая 16: ошибка: k не может быть разрешен 16: ошибка: не удается вызвать length() для типа массива String[] 16: ошибка: k не может быть разрешен 17: ошибка: j не может быть разрешен 17: ошибка: метод reverse(String) не определен для типа P 17: ошибка: k не может быть разрешен 17: ошибка: k не может быть разрешен