середа, 18 липня 2012 р.

Массивы



1.Определение массива


     Масиви-це структури даних, які визначатимуться програмістом самостійно і служать для зберігання великої кількості змінних з однаковим типом даних. Давайте уявимо, що нам необхідно зберегти 100 значень, для чого в звичайних умовах необхідно 100 змінних. Явне декларування 100 змінних є тяжким і непотрібним заняттям:
int i1;
int i2;
...

для цього простіше створити масив
int [ ] a;
a=new int[100]; 
або простіше
int [ ] a=new int[100];

 

В мові Java є засіб для одночасного створення масиву і його ініціалізації. Ось приклад такої синтаксичної конструкції:

int[] smallPrimes= { 2, 3, 5, 7, 11, 13};

Відзначимо, що в цьому випадку не потрібно застосовувати оператор new. Крім того, можна навіть ініціалізувати безіменний масив:

new int[ ] { 16, 19, 23 , 29 , 31, 37}

Розглянемо приклад


import java.util.*;
public class masiv {
public static void main(String[] args) {

int n=20; //вводимо змінну в якій будемо зберігати кількість елементів масиву
int [] a=new int[n+1];
//створює масив, який містить 21 елемент з номерами 0, 1, 2, 3, ..., 20
//оскільки елементи масиву- цілі, то при створенні вони рівні нулю.

//заповнюємо 10 чисел масиву випадковими числами
for (int i=0 ; i<=n;i++){
    a[i]=1+(int)(Math.random()*5); //заповнюємо масив випадковими числами від 1 до 5
}

//виводить елементи масиву разом з номерами в стовпчик
for (int i=0 ; i<=n;i++){
    System.out.println(i+"  "+a[i]+"   ");
}

//виводить елементи масиву в рядочок
for (int i=0 ; i<=n;i++){
    System.out.print(a[i]+"   ");
}
}
}


С помощью массива мы можем определить большое число переменных данного типа в одной строке, например:
  1. Начнем новую программу AvergeNumber.java и создадим ее каркас:
//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
}
}
  Далее декларируем массив для типа данных double.

  2.Определим для массива имя и тип данных:
//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
}
}

  Декларация массива заключается в указании типа данных, за которым следуют скобки [], а затем имя массива. Квадратные скобки сообщают компилятору, что декларируется не единственная переменная типа double, а массив таких переменных.
Однако на этапе декларирования массива не выделяется необходимая оперативная память (в отличие от декларирования обычной переменной), в связи с этим массив еще не “приведен в рабочее состояние”.

  3.Выделим для массива необходимый объем оперативной памяти:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10]; }
}

Число элементов массива указывается компилятору с помощью присваивания имени массива следующего выражения:
new DataType [Number];
В приведенном выше примере мы определили массив из 10 чисел с типом double. Ключевое слово new обозначает специальный оператор, с которым мы еще столкнемся при рассмотрении создания экземпляров классов.

2.Обрашение к отдельным элементам массива


     Элементы массива располагаются в оперативной памяти последовательно, образуя один блок данных. Это позволяет программисту обращаться к отдельному элементу массива с помощью его последовательного номера в массиве, который указываеться в качестве индекса в квадратных скобах после имени массива. Необходимо лишь помнить, что нумерация элементов массива начинается с нуля, то есть первый элемент массива имеет индекс 0.
картинка


  1.Считаем данные с клавиатуры:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp;

System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);

}

}

2.Присвойм считаное с клавиатуры значение первому элементу массива:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp;

System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);

measurement [0] = temp;
}

}

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

3.Обрашение к отдельным элементам массива в цикле.


     Циклы очень удобны для поиска и обработки элементов массивов произвольной величины, при этом переменная цикла часто используется в качестве индекса для доступа к отдельным элементам массива. В данном случае мы используем цикл для инициализации значений массива.
  1.Добавим оператор цикла for, который имеет значения переменной цикла от 0 до 9:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp, loop;

System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);

measurement [0] = temp;
for (loop=0; loop<=9; ++loop)
{
}
}}


картинкаЕсли количество элементов массива не известно, то следует использовать переменную Length
int value = measurement.length
  2.Переместим блок инструкций для ввода данных внутрь цикла:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp, loop;

measurement [0] = temp;

for (loop=0; loop<=9; ++loop)
{
System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);
}
}

}

  3.Последовательно присвоим введенные значения элементам массива:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp, loop;

for (loop=0; loop<=9; ++loop)
{
System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);

measurement [loop] = temp; }
}

}

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

  4.Добавим второй цикл,в котором вычисляется среднее значение для значений всех элементов массива:

//Вычисление среднего значения

imoprt java.lang.*;
imoprt java.io.*;

public class AvergeNumber
{
public static void main (String [] args) throws IOException
{
double [] measurements;
measurements = new double [10];
BufferedReader bReader = new BufferedReader (new InputStream(System.in));

String inputStr;
int temp, loop;

for (loop=0; loop<=9; ++loop)
{
System.out.print("Введите элементы массива");

inputStr = bReader.readLine ();
temp = integer.parseInt(inputStr);

measurement [loop] = temp;
}
double averageNumber = 0;
for (loop = 0; loop <= 9; ++loop)

{
averageNumber += measurements [loop];
}
averageNumber = averageNumber/10.0;
System.out.println ("Average value = " + averageNumber);
}
}

Обхід матриці: обхід "змійкою"

   За даним числом N потрібно заповнити квадратну матрицю розміром NxN цілими числами від 1 доN2; наступним чином:
  • у лівому верхньому куті знаходиться число 1
  • далі числа розміщуються "змійкою", тобто за зростанням зліва направо в непарних рядках, і зправа наліво — у парних.

Технічні умови

   Вхідні дані
   Вхідний файл містить ціле число N.
   Вихідні дані
   Вихідний файл повинен містити заповнену матрицю у вигляді N рядків по N цілих чисел у кожному.
   1 ≤ N ≤ 100




import java.io.*;
import java.util.*;

public class Main
{
public static void main(String[] args)   {
  Scanner in = new Scanner(System.in);
  PrintWriter out = new PrintWriter(System.out);

int n=in.nextInt();
int a[][]=new int[n+1][n+1];
int k=1;

for (int i=1; i<=n; i++ ){ // цикл по рядкам і -- номер рядка   
     if (i%2!=0)//для непарних   
     for (int j=1; j<=n; j++){// цикл ро стовпам j -- момер стовця
         a[i][j]=k;
       k++;
       }
   else // для парних рядків 
             for (int j=n; j>=1; j--){// цикл ро стовпам j -- момер стовця
                 a[i][j]=k;
               k++;
           }
   }

for (int i=1; i<=n; i++ ){
   for (int j=1; j<=n; j++){
       if (j<n)out.print(a[i][j]+" ");
       else out.print(a[i][j]);
   }
out.println();  
}
 out.flush();
}
}

Немає коментарів:

Дописати коментар