2015-03-18 3 views
-3

Я работаю через учебную книгу по Java, и на данный момент я узнаю о массивах и векторах. Я все время занимаюсь этим до сих пор. Я долгое время задерживался на этом вопросе и понятия не имею, как справиться с этим, моя голова вот-вот взорвется!Манипуляция и исправление Java-массива

Вопросы для этой конкретной программе, я должен решить, являются:

  1. Элементарная проверка ошибок вводится, в частности, проверить, что токены массив состоит из двух элементов, если есть проблема с форматом данных информирует пользователь, но продолжать принимать входные данные.
  2. Он принимает входной сигнал либо

    • бросить
    • положить имя метки
    • получить имя

    отказа от курения сценарий работает как и раньше, второй сценарий хранит студента и их знак на следующем доступный индекс массива; в то время как получает только возвращает знак любого ученика, который соответствует имени (там может быть более одного такого ученика, там их много).

  3. Программа считывает метки как целое не String (вы можете найти примеры структуры вы потребности путем поиска Integer.parseInt на Google).

  4. После ввода текста на печать также отображается средняя метка и высшая отметка.

код Java выглядит следующим образом:

import java.util.Scanner; 

public class ArrayInput { 
    public static void main(String args[]) { 
     Scanner s = new Scanner(System.in); 
     String b; 
     String student[] = new String[50]; 
     String mark[] = new String[50]; 
     int i = 0; 
     while ((b = s.nextLine()) != null) { 
      if (b.equals("quit")) break; 
      String Tokens[] = b.split(' '); 
      // System.out.println(Tokens[0] + ' ' + Tokens[1]); 
      student[i] = Tokens[0]; 
      mark[i] = Tokens[1]; 
      i++; 
     } 
     for (int j = 0; j < i; j++) { 
      System.out.println(student[j] + ' ' + mark[j]); 
     } 
    } 
} 

Он также выбрасывает на ошибку на этой линии:

String Tokens[] = b.split(' '); 
+0

use Eclipse. очень популярный java ide. он выделит ошибки и поможет с API. –

+1

Добро пожаловать в stackoverflow! Многочастные вопросы неудобны, потому что есть несколько ответов, которые в совокупности составляют решение, а только один может быть помечен как правильный. Подумайте о нескольких, отдельных вопросах: сначала о ошибке компилятора, которую вы получаете. Затем попробуйте решить '(a)' и задать другой вопрос, если вы не можете понять это.Затем попробуйте решить '(b)' и отправить, если вы не можете понять это и т. Д. –

ответ

1

использование:

b.split("\\s+"); 

разделить на непечатаемых , Это приведет к тому, что любое количество последовательных пробелов разделит вашу строку на токены, поскольку метод split() в java построен для использования с регулярными выражениями в любом случае

+1

Можете ли вы также объяснить, в чем разница? ОП может не знать. – Tom

+0

должно быть хорошо сейчас :) – 12dollar

+0

Это. Если вы также добавите примечание, что вы используете * String *, а не * char *, как OP, тогда это будет еще лучше :). Вот соответствующий JavaDoc: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29. – Tom

0

Я бы написал это так (попробовал это на IDEONE) :

import java.util.Scanner; 

    public class ArrayInput { 
     public static void main(String args[]) { 
      Scanner s = new Scanner(System.in); 
      String b; 
      String[] student = new String[50]; // changed here 
      String[] mark = new String[50]; // Changed here 
      int i = 0; 
      b = s.nextLine(); // Get the next line here first 
      while (b != null) { // Evalaute b as for while loop here 
       if (b.equals("quit")) break; 
       String[] Tokens = b.split(" "); // Changed to use " ", not ' ' 
       // System.out.println(Tokens[0] + ' ' + Tokens[1]); 
       student[i] = Tokens[0]; 
       mark[i] = Tokens[1]; 
       i++; 
       b = s.nextLine(); // get the next line here before looping again. 
      } 
      for (int j = 0; j < i; j++) { 
      System.out.println(student[j] + ' ' + mark[j]); 
     } 
    } 
} 

Scanner класс имеет метод, называемый hasNext(), который вы можете использовать довольно услужливо для while() петель. Если вы воспользуетесь этим, улучшите следующий сниппт:

// b = s.nextLine() not needed anymore 
while(s.hasNext()){ 
... 
... 
... 
} 
+0

Да? Вы также будете использовать 'while ((b = s.nextLine())! = Null)' со сканером? Вы знаете, что это приведет к Исключению, правильно? – Tom

+0

Правильный способ петли с помощью «Сканера» - 'while (scanner.hasNext ...())' ('...' like * Line *, * Int * и т. Д.). Сканер не возвращает «null», поэтому, если вы читаете что-то, что может закончиться, например, файл, то ваш текущий цикл вызовет исключение. – Tom

Смежные вопросы