Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

methodichkaA5

.pdf
Скачиваний:
17
Добавлен:
02.02.2015
Размер:
801.83 Кб
Скачать

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

Во время инициализации необходимо указать размерность массива, т.е.

задать количество столбцов и строк – f = new float[8][8]; или float f = new float[8][8];

В примере задается двумерный массив 8х8, который структурой напоминает шахматную доску, в каждую клетку которой можно записать число типа float. Принцип работы с двумерным массивом напоминает принцип работы с одномерным, только при указании ячейки надо задавать две координаты вместо одной. Графически двумерный массив MxN можно представить следующим образом.

0 1 2 3 4 … N

0

15

27

M

Впримере в ячейке a[1][1] записано число «5». В ячейке a[2][4] записано число

«7».

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

a[0][0]=1; a[0][1]=2; a[0][2]=3;

a[1][0]=4; a[1][1]=5; a[1][2]=6;

a[2][0]=7; a[2][1]=8; a[2][2]=9;

Пример.

Создать двумерный массив 5х10 и заполнить его случайными числами. Затем вывести массив на консоль в виде матрицы 5х10.

package arrays; import java.lang.*; public class ArrTst1 {

public static void main(String[] argv) { //объявление массива

int[][] f = new int[5][10];

//заполнение массива случайными двузначными числами for(int i=0;i<5;i++){

for(int j=0;j<10;j++){

f[i][j] = (int)Math.round(Math.random()*(double)89)+10;

}

31

}

//вывод массива на экран

for(int k=0;k<5;k++){

for(int m=0;m<10;m++){

System.out.print(f[k][m]+" ");

}

System.out.println();

}

}

}

Результат.

83 27 59 89 47 98 97 93 65 85

13 72 17 94 53 96 57 32 72 80

86 16 49 90 88 43 27 64 68 12

41 85 75 21 58 40 59 51 69 41

86 27 58 42 90 81 14 20 70 39

Пример.

Создать двумерный массив 8х8. Заполнить его числами 0 и 1 в шахматном порядке.

package arrays; import java.lang.*; public class ArrTst2{

public static void main(String[] argv) { int[][] f = new int[8][8];

for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ if((i+j)%2==0){

f[i][j]=1;

}else{

f[i][j]=0;

}

}

}

for(int k=0;k<8;k++){ //вывод массива на экран for(int m=0;m<8;m++){ System.out.print(f[k][m]+" ");

}

System.out.println();

}

}

}

Результат.

32

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 0

0 1 0 1 0 1 0 1

Пример.

Создать массив 8х8, заполнить его случайными двузначными числами.

Вывести на консоль элементы двух главных диагоналей.

package arrays; import java.lang.*; public class ArrTst3{

public static void main(String[] argv) { int[][] f = new int[8][8];

for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) {

f[i][j] = (int) Math.round(Math.random() * (double) 89) + 10;

}

}

for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) {

System.out.print(f[i][j] + " ");

}

System.out.println();

}

System.out.println(); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) {

if ( (i == j) || (j == 8 -1- i)) { System.out.print(f[i][j]+" ");

}

}

}

}

}

Результат.

30 72 30 79 28 47 39 27

33

68 69 49 34 63 42 44 95

46 69 61 43 74 41 32 34

56 47 91 53 40 59 41 90

44 84 69 89 49 96 24 28

39 34 78 51 40 62 79 26

27 79 93 26 76 87 76 15

71 17 15 92 98 73 91 35

30 27 69 44 61 41 53 40 89 49 78 62 79 76 71 35

4.Строковые типы данных в java

4.1.Строки

Строки – это последовательности символов, например "Hello". В языке

Java нет встроенного типа для строк. Вместо этого стандартная библиотека языка Java содержит встроенный класс String. Каждая строка, заключенная в кавычки, представляет собой экземпляр класса String.

String e = ""; // Пустая строка.

String greeting = "Hello";

Язык Java, как и большинство языков программирования, дает возможность использовать знак + для объединения (конкатенации) двух строк.

String expletive = "Вставка";

String PG13 = "удаленная";

String message = expletive + PG13;

Код, приведенный выше, присваивает переменной message строку

"Вставкаудаленная". (Обратите внимание на отсутствие пробела между словами: знак + объединяет две строки точно в указанном порядке.).

При конкатенации строки со значением, которое строкой не является, это значение преобразовывается в строку. Например, код

int age = 13;

String rating = "PG" + age;

присваивает переменной rating строку "PG13".

Это свойство широко используется в операторах вывода. Например,

оператор

System.out.println("Ответ равен " + answer);

34

выводит на печать все, что требуется (причем вставляет пробел после слова

"равен").

4.2.Подстроки

Спомощью метода substring класса String можно выделить подстроку из заданной строки. Например, код

String greeting = "Hello";

String s = greeting.substring(0, 4);

образует строку, состоящую из символов "Hell". В языке Java символы в строке подсчитываются довольно своеобразно: первый символ строки занимает нулевую позицию.

Например, символ 'H' в строке “Hello” занимает нулевую позицию, а

символ 'о' четвертую. Таким образом, первый параметр метода substring

задает позицию символа в строке greeting, с которого будет начинаться новая подстрока. Второй параметр метода substring задает позицию символа, кото-

рый уже не попадет в подстроку. Допустим, необходимо скопировать символы из позиций 0, 1, 2 и 3 (от позиции 0 до позиции 3 включительно), т.е.

метод substring будет копировать символы из позиций от 0 до 4

исключительно.

Такой способ имеет определенное преимущество: легко вычислить длину подстроки. Строка s.substring(a, b) всегда состоит из b-а символов. Например,

подстрока "Неll" имеет длину 4-0 = 4.

4.3. Редактирование строки

Для определения длины строки нужно использовать метод length,

например:

String greeting = "Hello";

int n = greeting.length () ; // Длина строки равна 5.

Если тип char означает символ в формате Unicode, то класс String означает последовательность символов в кодировке Unicode. Из строки можно выделить отдельный символ. Вызов метода s.charAt(n) возвращает символ в

35

кодировке Unicode, находящийся в позиции n, где число n лежит в диапазоне

от 0 до s.length() - 1, например:

char last = greeting. charAt (4); // Четвертый символ - 'о'.

Однако класс String не дает методов, позволяющих изменить символ в заданной строке. Нет возможности просто изменить последнюю позицию в строке greeting, поместив в нее восклицательный знак, чтобы преобразовать строку greeting в строку "Hell!". Для того чтобы модифицировать строку в языке Java достаточно просто выделить подстроку, которую необходимо оставить без изменения, и конкатенировать ее с символами, которые надо поставить в нужные позиции:

greeting = greeting.substring(0, 4) + "!";

С помощью такого оператора можно присвоить переменной greeting

строку "Hell!".

Поскольку, программируя на языке Java, нет возможности изменять отдельные символы в строке, (как число 3 всегда равно 3, так и строка "Hello"

всегда содержит символы 'Н', 'е', 'l' , 'l' и 'о') то изменить эти значения напрямую невозможно. Однако, как только что было показано, можно изменить содержимое строковой переменной greeting и заставить ее ссылаться на другую строку так же, как числовой переменной, в которой хранится число

3, можно присвоить число 4.

Не происходит ли при этом большой потери эффективности? Кажется,

было бы намного проще изменять символы, чем создавать новую строку заново. Возможно, это и так. Действительно, неэффективно создавать новую строку, образованную с помощью конкатенации строк "Hell" и "!". Однако неизменяемые строки имеют одно большое преимущество: компилятор может делать строки совместно используемыми.

4.4. Проверка строк на равенство

Чтобы проверить, совпадают ли две строки, следует использовать метод equals; вызов метода s.equals(t) возвращает значение true, если строки s и t равны между собой, в противном случае он возвращает значение false. Отметим, что

36

строки s и t могут быть как переменными, так и константами. Например,

выражение

"Hello!".equals(command);

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

equalsIgnoreCase.

"Hello".equalsIgnoreCase("hello") ;

Для проверки строк на равенство нельзя применять оператор «!» Он проверяет лишь, хранятся ли обе строки в одной и той же области памяти.

Разумеется, если обе строки хранятся в одном и том же месте, они должны совпадать между собой. Однако вполне возможна ситуация, при которой идентичные строки хранятся в разных местах.

String greeting = "Hello"; // Инициализирует

//переменную

// greeting строкой.

if (greeting = "Hello") .. .

// Возможно, это условие истинно.

if (greeting.substring (0, 4) == "Hell") ...

// Возможно, это условие ложно.

Если виртуальная машина всегда позволяет совместно использовать одинаковые строки, то для проверки их равенства можно применять оператор

== (два знака «равно»). Однако совместно использовать можно лишь константы, а не строки, являющиеся результатами таких операций, как + или substring. Следовательно, либо нужно навсегда отказаться от проверок строк на равенство с помощью оператора == (два знака «равно»), либо будет получена программа, содержащая наихудшую из возможных ошибок – перемежающуюся ошибку, появление которой невозможно предсказать.

Класс String в языке Java содержит более 50 методов. Неожиданно большое количество из них оказались полезными, так что можно легко себе представить, что они используются довольно часто. В таблице 10 дается информация о некоторых методах класса String. В таблице представлены не все методы класса String. За более полной информацией необходимо обратиться к официальной документации.

37

Таблица 10 – методы класса String

Тип

 

 

 

 

 

 

 

выдав.

Метод

 

Пояснение

 

 

знач.

 

 

 

 

 

 

 

char

charAt(int index)

Возвращает символ, расположенный в

 

 

 

указанной позиции.

 

 

int

compareTo(String

other)

Возвращает отрицательное значение, если

 

 

 

строка предшествует строке other в

 

 

 

лексикографическом порядке, положи-

 

 

 

тельное значение — если строка other

 

 

 

предшествует

данной

строке

в

 

 

 

лексикографическом порядке, и 0 - если

 

 

 

строки идентичны.

 

 

 

boolea

endsWith(String

suffix)

Возвращает значение true, если строка

n

 

 

заканчивается подстрокой suffix.

 

boolea

equals(Object other)

Возвращает значение true, если строка

n

 

 

равна строке other .

 

 

boolea

equalsIgnoreCase(String

Возвращает значение true, если строка

n

other)

 

равна строке other без учета различий

 

 

 

между прописными и строчными буквами.

int

index(String str)

 

Возвращает начало первой подстроки,

int

indexOf(String str, int from)

совпадающей со строкой str, начиная с

 

 

 

позиции 0 или frorm.

 

 

int

lastlndexOf(String str)

Возвращает начало последней подстроки,

int

lastlndexOf(String str, int

равной строке str, начиная с позиции 0 или

 

from)

 

from.

 

 

 

 

int

length()

 

Возвращает длину строки.

 

 

String

replace(char С1, char C2)

Возвращает строку, полученную заменой

 

 

 

всех символов С1 в строке символом C2.

 

boolea

startWith(String prefix)

Возвращает значение true, если строка

n

 

 

начинается подстрокой prefix.

 

 

String

substring(int bx)

 

Возвращает строку, состоящую из всех

String

substring (int bx, int ex)

символов, начиная с позиции bx и

 

 

 

заканчивая концом строки или позицией ex,

 

 

 

исключая его.

 

 

 

String

toLowerCase()

 

Возвращает новую строку, состоящую из

 

 

 

всех символов исходной строки, при этом

 

 

 

все прописные буквы преобразовываются в

 

 

 

строчные.

 

 

 

 

String

toUpperCase()

 

Возвращает строку, состоящую из всех

 

 

 

символов исходной строки, при этом все

 

 

 

строчные

буквы

преобразовываются

в

 

 

 

прописные.

 

 

 

 

String

trim()

 

Возвращает новую строку, из которой

 

 

 

исключены

все

предшествующие

и

 

 

 

замыкающие пробелы.

 

 

38

Пример.

Создать строку, занести в нее значение «Мама мыла раму». Вывести на консоль строчку некоторое количество раз, причем при каждом последующем выводе требуется обрезать в конце строки на один символ больше. Выполнять вывод до тех пор, пока не закончатся символы в строке.

package sss;

public class sssClass{

public static void main(String[] argv) { String st = "Мама мыла раму"; for(int i=0; i<st.length(); i++){

System.out.println(st.substring(0, st.length() – i ));

}

}

}

Результат.

Мама мыла раму Мама мыла рам Мама мыла ра Мама мыла р Мама мыла Мама мыла Мама мыл Мама мы Мама м Мама Мама Мам Ма

М

4.5. Считывание ввода

Уже было показано, как легко можно вывести информацию на "стандартное устройство вывода" (т.е. консольное окно), вызвав метод System.out.println. К сожалению, считать информацию со "стандартного устройства ввода" (т.е. клавиатуры) немного сложнее.

Однако создать диалоговое окно для ввода данных с клавиатуры достаточно легко. Вызов метода

JOptionPane.showInputDialog(promptString)

39

выводит на экран диалоговое окно, в котором пользователь может набрать свои данные (рис. 7). Этот метод возвращает строку, набранную пользователем в этом окне.

Рисунок 7 – Запрос на ввод данных

Например, здесь показано, как запросить имя пользователя при запуске

программы. String name = JOPtionPane.showinputDialog("What is your name?");

Чтобы считать число, нужно выполнить более сложную работу. Метод JOptionPane.showInputDialog возвращает строку, а не число. Для преобразования этой строки в число нужно использовать метод Integer.parselnt или

Double.parseDouble, например:

String input = JOptionPane. showInputDialog ("How old are you?") ;

int age = Integer.parselnt(input);

Если пользователь наберет на клавиатуре число 40, то строковой переменной input будет присвоена строковое значение "40". Метод Integer.parselnt преобразовывает строку в соответствующее число, т.е. 40.

Если параметр метода parselnt содержит символы, не являющиеся цифрами, метод возбуждает исключительную ситуацию. Если программа не "перехватывает" эту исключительную ситуацию, виртуальная машина прекращает ее выполнение и выводит на консоль сообщение об ошибке.

Пример.

Программа запрашивает имя пользователя и его возраст, а затем выводит на экран подобное сообщение: Здравствуй, Вася. В следующем году тебе, возможно, исполнится 25.

import javax.swing.*; public class InputTest{

public static void main(String[] a){ // Первый ввод.

String name = JOptionPane.showInputDialog("Ваше имя") ; // Второй ввод.

String input = JOptionPane.showInputDialog("Ваш возраст") ;

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]