Вопрос по строковому методу length в java

148
21 декабря 2019, 04:40

В примерах кода в своей книге ("Структуры данных и алгоритмы") Лафоре не пользуется методом length. А отдельно объявляет дину массива, например как приведено ниже. 1. Почему не использовать метод length? 2. Или бывают случаи, когда длина массива нужна в отдельной переменной? Какие? 3. Не понятен второй коммент, ведь nElems равен a.length

public void noDups() {    //Avoid duplicates.
int i, j;
int nElems = 6;
int[a] = {11,20,6,6,6,8};
for(i=0; i < nElems, i++) {
j=i+1;
while(j < nElems) {
    if(a[i] == a[j]) {
        for(int k = j; k < nElems; k++)
           if (k == nElems - 1) a[k] = 0;
           //avoids looking for a[k+1] when nElems == a.length
           else a[k] = a[k + 1];  //Change to next neighbour
        nElems--;
    } else j++;
Answer 1

Отвечая на п.1 и п.2 Во-первых если дело касается массивов, то размер определяется не методом length() (как, например, в строках), а хранится в его переменной экземпляра length. Просто названия похожи и вызывают путаницу, длину строки мы получаем через метод stroka.length(), а размер массива через его свойство (поле) massiv.length. Во-вторых получить длину массива можно если он уже создан, но в реальных приложениях массивы не всегда создаются сразу, иногда переменная массива инициируется, а определение его размера и заполнение элементами происходит позже. Возможно автор книги подразумевал такой вариант, но для упрощения в примере инициировал массив и заполнял его элементами сразу. Например, наша задача получить от пользователя желаемый размер массива, заполнить его натуральными числами и вывести их в консоли. Т.е. предварительно мы не знаем какой у нас будет массив:

import java.util.Scanner;

public class Primer{

public static void main(String[] args){
    //переменная для будущего размера массива
    int nElems = 0;
    int[] myArray;
    Scanner scan = new Scanner(System.in);
    System.out.println("Введите размер массива (целое число):");
    // принимаем от пользователя необходимый размер массива
    while(scan.hasNext()){
        if(scan.hasNextInt()){
            nElems = scan.nextInt();
            break;
        } 
        else{
            String s = scan.next();
            System.out.println("Неправильный формат данных.\n" + 
                "Для размера массива необходимо ввести целое число!");
            return;             
        }
    }
    // создаем массив, размер которого задан пользователем
    // и заполняем его целыми числами (для примера)
    myArray = new int[nElems];
    for(int i=0; i < nElems; i++){
        myArray[i] = i + 1;
    }
    // выводим данные массива
    for(int n: myArray){
        System.out.print(n + " ");  
    }
    System.out.println();
}       

}

READ ALSO
Почему android studio подчёркивает переменную?

Почему android studio подчёркивает переменную?

myRad имеет тип floatКто-нибудь знает, что нужно исправить? У меня есть другие переменные float, но они не подчёркнуты

162
Автоматическое приведение типов

Автоматическое приведение типов

Выдержка из пособия по Java:

168
Рефакторинг интеерпретатора brainfuck (clean code)

Рефакторинг интеерпретатора brainfuck (clean code)

У меня есть относительно чистый код интерпретатора brainFuck на java, могли бы вы дать несколько советов по его улучшению в плане чистоты кода, и, если...

112
Не удалаяется файл БД при удалении приложения (Android)

Не удалаяется файл БД при удалении приложения (Android)

Работаю с готовой БДПри запуске приложения копирую из Assets в каталог БД приложения по пути:

143