Как увидеть, если строка имеет больше чисел, чем другие символы в Java - PullRequest
1 голос
/ 03 октября 2010

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

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

Итак, я подумал о том, чтобы поместить входную строку в массив, затем найти числа (ASCII # между 48 и 57) и сосчитать их. Затем сравните количество чисел с количеством букв и посмотрите, какое из них имеет больше.

однако я не могу запрограммировать, что он считает числа в строке. кто-нибудь может мне помочь, у меня уже есть это:

public class opgave41 {



public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("input  a string:");
    String reeks = sc.nextLine();
    char[] array1 = reeks.toCharArray();

    int numbers;
    int other;

    for(int i=0;i<array1.length;i++){

        if (int array1[i] < 57 || int array1[i] > 48) 
            numbers++;

        else
            other++;

    }
    System.out.prinln(numbers);
    System.out.prinln(other);
}

}

если я скомпилирую это, я получу это:

opgave41.java:38: '.class' expected
        if (int array1[i] < 57 || int array1[i] > 48) 
                            ^

opgave41.java: 39: ')' ожидается числа ++;
^ 2 ошибки

как я могу получить это для работы?

Ответы [ 4 ]

1 голос
/ 03 октября 2010

Нет необходимости в циклах, проверках и т. Д., Гораздо проще с регулярным выражением для чисел.

public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("input  a string:");
        String reeks = sc.nextLine();
        String symbols = reeks.replaceAll("[0-9]", "");

        System.out.println("others  - " + symbols.length());
        System.out.println("numbers - " + (reeks.length() - symbols.length()));

    }
1 голос
/ 03 октября 2010

После исправления очевидных синтаксических ошибок я получил следующий код на основе вашего:

  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("input  a string:");
    String reeks = sc.nextLine();

    int numbers = 0;
    int other = 0;

    for (char c : reeks.toCharArray()) {
      if ('0' <= c && c <= '9')
        numbers++;
      else
        other++;
    }

    System.out.println(numbers);
    System.out.println(other);
  }

Я также заменил магические числа 48 и 57 символьными литералами, поскольку это проясняет намерение.

0 голосов
/ 03 октября 2010

Логика в порядке *, вам просто нужно использовать элементы массива char вместо длины массива.Так что просто замените

  if (int array1.length < 57 || int array1.length > 48) 

на

  if (array1[i] <= '9' && array1[i] >= '0') 

(обратите внимание на &&, так как вы хотите, чтобы оба условия были верными.будет означать меньше 9 ИЛИ больше 0 , что верно для любых char)

* , кроме некоторых синтаксических ошибок

0 голосов
/ 03 октября 2010

Вы проверяете array1.length, что является длиной массива символов.Я не думаю, что это то, что вы намерены.Вместо этого вы хотите array1[i], чтобы получить текущий символ.Кроме того, я думаю, что у вас есть это в обратном направлении:

if (int array1.length < 57 || int array1.length > 48) 

Если вы исправите это для использования array1[i], он все равно будет проверять, что текущий символ не число.Но затем вы продолжаете увеличивать счетчик numbers.Более того, вы можете также рассмотреть возможность использования метода Character.isDigit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...