ArrayList в Java и вводе

из группы google, удаление каталога невозможно. Вы должны хранить список файлов где-нибудь (в базе данных Firebase) и удалять их по одному.

https://groups.google.com/forum/#!topic/firebase-talk / aG7GSR7kVtw

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

6
задан Octaflop 22 September 2008 в 17:32
поделиться

4 ответа

Ответы:

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

У меня был бы простой цикл с условием продолжения вместо {}, в то время как... и помещают условие в в то время как... В моем примере это читало:

в то время как число чтения не является сигналом конца, и количество ниже, чем предел: сделать.

> 2. Чем тип объекта собирается быть для метода чтения? Двойное [], или ArrayList?

ArrayList, однако я настоятельно рекомендовал бы Вам использовать Список (java.util. Список), взаимодействуют через интерфейс вместо этого. Это - хорошая практика OO к программе к интерфейсу скорее к реализации.

> 2.1How я объявляю, что тип метода arraylist?

См. код ниже.

> 2.2. Как я препятствую массиву хранение больше чем 1 000 значений в нем?

Путем включения этого ограничения, в то время как условие.

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class InputTest{

    private int INPUT_LIMIT = 10000;

    public static void main( String [] args ) {
        InputTest test = new InputTest();
        System.out.println("Start typing numbers...");
        List list = test.readRange( 2.0 );
        System.out.println("The input was " +  list );
    }

    /**
     * Read from the standar input until endSignal number is typed.
     * Also limits the amount of entered numbers to 10000;
     * @return a list with the numbers.
     */
    public List readRange( double endSignal ) {
        List<Double> input = new ArrayList<Double>();
        Scanner kdb = new Scanner( System.in );
        int count = 0;
        double number = 0;
        while( ( number = kdb.nextDouble() ) != endSignal && count < INPUT_LIMIT ){
            System.out.println( number );
            input.add( number );
        }
        return input;
    }
}

Заключительные комментарии:

Это предпочтено, чтобы иметь "методы экземпляра", чем методы класса. Этот путь в случае необходимости "readRange" мог быть обработан подклассом, не имея необходимость изменять подпись, таким образом В образце, я удалил "статическое" ключевое слово создавание экземпляра класса "InputTest"

В стиле кода Java имена переменной должны войти в случай верблюда как в "endSignal", а не "end_signal"

2
ответ дан 17 December 2019 в 00:17
поделиться

То, в чем Вы нуждаетесь в своем условии цикла:

while ( input.get( input.size()-1 ) != end_signal );

То, что Вы делаете, постепенно уменьшает переменную счетчика.

Также необходимо объявить ArrayList как так:

ArrayList<Double> list = new ArrayList<Double>();

Это входит в определенный для типа список и позволяет условие, как дали. Иначе существует дополнительный кастинг.

5
ответ дан 17 December 2019 в 00:17
поделиться

Я думаю, что Вы начали не плохо, но здесь являетесь моим предложением. Я выделю важные различия и точки ниже кода:

консоль пакета;

импорт java.util.; импорт java.util.regex.;

общедоступный класс ArrayListInput {

public ArrayListInput() {
    // as list
    List<Double> readRange = readRange(1.5);

    System.out.println(readRange);
    // converted to an array
    Double[] asArray = readRange.toArray(new Double[] {});
    System.out.println(Arrays.toString(asArray));
}

public static List<Double> readRange(double endWith) {
    String endSignal = String.valueOf(endWith);
    List<Double> result = new ArrayList<Double>();
    Scanner input = new Scanner(System.in);
    String next;
    while (!(next = input.next().trim()).equals(endSignal)) {
        if (isDouble(next)) {
            Double doubleValue = Double.valueOf(next);
            result.add(doubleValue);
            System.out.println("> Input valid: " + doubleValue);
        } else {
            System.err.println("> Input invalid! Try again");
        }
    }
    // result.add(endWith); // uncomment, if last input should be in the result
    return result;
}

public static boolean isDouble(String in) {
    return Pattern.matches(fpRegex, in);
}

public static void main(String[] args) {
    new ArrayListInput();
}

private static final String Digits = "(\\p{Digit}+)";
private static final String HexDigits = "(\\p{XDigit}+)";
// an exponent is 'e' or 'E' followed by an optionally
// signed decimal integer.
private static final String Exp = "[eE][+-]?" + Digits;
private static final String fpRegex = ("[\\x00-\\x20]*" + // Optional leading "whitespace"
        "[+-]?(" + // Optional sign character
        "NaN|" + // "NaN" string
        "Infinity|" + // "Infinity" string

        // A decimal floating-point string representing a finite positive
        // number without a leading sign has at most five basic pieces:
        // Digits . Digits ExponentPart FloatTypeSuffix
        // 
        // Since this method allows integer-only strings as input
        // in addition to strings of floating-point literals, the
        // two sub-patterns below are simplifications of the grammar
        // productions from the Java Language Specification, 2nd
        // edition, section 3.10.2.

        // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
        "(((" + Digits + "(\\.)?(" + Digits + "?)(" + Exp + ")?)|" +

        // . Digits ExponentPart_opt FloatTypeSuffix_opt
        "(\\.(" + Digits + ")(" + Exp + ")?)|" +

        // Hexadecimal strings
        "((" +
        // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "(\\.)?)|" +

        // 0[xX] HexDigits_opt . HexDigits BinaryExponent
        // FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

        ")[pP][+-]?" + Digits + "))" + "[fFdD]?))" + "[\\x00-\\x20]*");// Optional
                                                                        // trailing
                                                                        // "whitespace"

}

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

    if (!readRange.isEmpty()) {
        double last = readRange.get(readRange.size() - 1);
    }
    
  2. Лучше возвратить Интерфейсы при работе с наборами Java, поскольку существует много реализаций определенных списков (LinkedList, SynchronizedLists...). Таким образом, при необходимости в другом типе Списка позже Вы можете легкое изменение конкретная реализация в методе, и Вы не должны изменять дальнейший код.

  3. Можно задаться вопросом, почему, в то время как оператор управления работает, но как Вы видите, существуют скобки вокруг следующего = input.next () .trim (). Таким образом, переменное присвоение происходит прямо перед условным тестированием. Также обрезка берет playe для предотвращения проблем whitespacing

  4. Я не использую nextDouble () здесь, потому что каждый раз, когда пользователь ввел бы что-то, которое это не двойное, ну, в общем, Вы получите исключение. При помощи Строки я могу проанализировать, независимо от того, что введено, пользователь дает, но также и протестировать против сигнала конца.

  5. Безусловно, пользователь, действительно оценочный двойное, я использовал регулярное выражение от JavaDoc Double.valueOf () метод. Если это выражение соответствует, значение преобразовывается, если не сообщение об ошибке будет распечатано.

  6. Вы использовали счетчик по основаниям, которые я не вижу в Вашем коде. Если Вы хотите знать, сколько значений было оценочным успешно, просто назовите readRange.size ().

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

  8. Я надеюсь, что Вы не смущены мной смешивающийся дважды и Дважды, но благодаря функции Java 1.5, Автоупаковывающей это, не без проблем. И поскольку Scanner.next () никогда не будет возвращать пустой указатель (afaik), этот should't быть проблемой вообще.

  9. Если Вы хотите ограничить размер Массива, использовать

Хорошо, я надеюсь, что Вы находите мое решение и объяснения полезными, используете result.size () как индикатор и повреждение ключевого слова для отъезда, в то время как проверяют утверждение.

Greetz, GHad

0
ответ дан 17 December 2019 в 00:17
поделиться

**

public static java.util.ArrayList readRange(double end_signal) {

    //read in the range and stop at end_signal

    ArrayList input = new ArrayList();

    Scanner kbd = new Scanner(System. in );
    int count = 0;

    do {
        input.add(Double.valueOf(kbd.next()));
        System.out.println(input); //debugging
        ++count;
    } while (input(--count) != end_signal);
    return input;
}

**

0
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: