Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Ввод данных с клавиатуры и класс Scanner.




Ввод данных с клавиатуры и класс Scanner.

Еще пара классов для общего развития. Представьте, что вы с клавиатуры хотите прочитать число int. А нельзя прочитать с клавиатуры число int. Надо прочитать строку, потом эту строку парсить и у вас получится 3-4 строки, чтобы эту операцию сделать. Поэтому давным-давно был написан класс Scanner, который позволяет читать данные с клавиатуры и главное он их читает, как строки внутри себя, но у него есть методы, которые сразу возвращают вам нужный простой тип. Например, метод «nextInt» возвращает прочитанное с клавиатуры целое число. Хорошая и очень полезная штука. Это может пригодиться.

Регулярные выражения.

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

Вопрос: Кто про них слышал?

Ответ: Представьте себе простую задачу. Вам говорят, пользователь будет вводить e-mail. Вам нужно проверить, что он ввел e-mail.

Вопрос: Сколько придется вам написать разных проверок и запрограммировать, чтобы убедиться, что это e-mail?

Ответ: Если вы напишите код, то это будет полстраницы кода, который по всем пунктам эти проверки выполняет. Вы спросите, ну и что с этим кодом не так? Да всё.

1) он медленный

2) представьте, что из 10 пунктов добавился какой-то 11. вам придется открыть код и его менять, а это не просто. Это очень не эффективно.

Вопрос: А что надо делать?

Ответ: В ЯП Perl это давным давно придумали. Называется « регулярные выражения ». РВ предлагает следующий подход. Вы делаете так называемый шаблон. К сожалению, изучение регулярных выражений не имеет никакого отношения к Java, потому что все время, которые вы там потратите, это будет время, потраченное на изучение того, как пишется шаблон этого регулярного выражения.

Чтобы ткнуть пальцев на что-то более менее приличное (см. ссылку на статью в презентации).

Этот шаблон пишется в одну строку.

Практика:

Конвертор целых чисел в двоичную систему.

 

 

Лабораторка /*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */   package app18. pkg1;   /**  *  * @author Student  */ public class App181 { //это мой класс внитри него все находится   /** * @param args the command line arguments */ public static void main(String[] args) {    // TODO code application logic here    int year = 2016; //значение текущего года    int dayNum = 304; //значение в диапазоне от 1 до 365    int monthNum = 0;    int daysInMonths[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //число дней в году    boolean isLeapYear= (year%4==0)& & (year%100! =0 || year%400==0);   //массив строк с именами месяцев   String months[] = {" January", " Febrary", " March", " April", " May", " June", " July", " August", " Septemper", " October", " November", " December" };                 for(int days: daysInMonths)   {       //в теле цикла увеличиваем значение переменной days на 1       if(isLeapYear & & days==28) ++days;       if(dayNum < = days){break; }       else       {           //dayNum = dayNum - days;           dayNum -= days;           monthNum++;       }                System. out. printf(" %d %s \n", dayNum, months[monthNum]);             }       }      }  

 

 

ЛАБА №2

 

/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */   package laba. pkg2;   /**  *  * @author Student  */ public class ComLineParser { private String[] keys; private String[] delimeters;       // варианты завершения разбора командной строки public enum SwitchStatus { NoError, Error, ShowUsage };   public ComLineParser(String[] keys) { this(keys, new String[]{" /", " -" }); } public ComLineParser(String[] keys, String[] delimeters) {    this. keys = keys;    this. delimeters = delimeters; } public void OnUsage(String errorKey) {    if(errorKey! = null)    {        //System. out. println(" формат ком. строки: имяПрограммы [-r< input-fileName> ] [-w< output-fileName> ]" );        System. out. println(" Command-line switch error: " + errorKey);    }    System. out. println(" формат ком. строки: имяПрограммы [-r< input-fileName> ] [-w< output-fileName> ]" ); System. out. println(" -? показать Help файл" ); System. out. println(" -r задать имя входного файла" ); System. out. println(" -w выполнить вывод в указанный файл" );         } public SwitchStatus OnSwitch(String key, String keyValue) {    System. out. println(key+" " +keyValue);    return SwitchStatus. NoError; } public Boolean Parse(String[] args) {    SwitchStatus ss = SwitchStatus. NoError;            int argNum;    for (argNum = 0; (ss == SwitchStatus. NoError) & & (argNum < args. length); argNum++) {           // провера наличия правильного разделителя        boolean isDelimeter = false;        for (int n = 0; ! isDelimeter & & (n < delimeters. length); n++) {            isDelimeter = args[argNum]. regionMatches(0, delimeters[n], 0, 1);        }                    if (isDelimeter) {            // проверка наличия правильного ключа            Boolean isKey = false;            int i;            for (i = 0; ! isKey & & (i < keys. length); i++) {                isKey = args[argNum]. toUpperCase(). regionMatches(1,                        keys[i]. toUpperCase(), 0, keys[i]. length());                if (isKey) break;            }            if (! isKey) {                ss = SwitchStatus. Error;               break;            } else {                ss = OnSwitch(keys[i]. toLowerCase(),                     args[argNum]. substring(1 + keys[i]. length()));            }        }        else {            ss= SwitchStatus. Error;            break;        }    }    // завершение разбора командной строки    if (ss == SwitchStatus. ShowUsage) OnUsage(null);    if (ss == SwitchStatus. Error)   OnUsage((argNum == args. length)? null: args[argNum]);            return ss == SwitchStatus. NoError; }   }
/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */   package laba. pkg2;   /**  *  * @author Student  */ public class Laba2 {   /** * @param args the command line arguments */ public static void main(String[] args) {    // TODO code application logic here    String[] keys = { "? ", " r", " w" };    //создаем объект этого класса    ComLineParser myarray = new ComLineParser(new String[]{"? ", " r", " w" });    myarray. Parse(args);                                    for(String s: args){        //myarray. Parse();        } //   for(String s: args){ //       System. out. println(s); //   } }    }

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...