Превратите ввод командной строки в массив - PullRequest
2 голосов
/ 22 апреля 2009

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

Вот код, который у меня есть:

//: object/PushtoArray
import java.io.*;
import java.util.*; 
class PushtoArray { 
    public static void main(String[] args) { 
    String[] s = new String[3]; 
    int i = 0; 

    //initialize console 
    Console c = System.console();   

    while ( i <= 2 ) {
        //prompt entry:
        //System.out.println("Enter entry #" + i + ": ");  
        //readin 
            s[i] = c.readLine("enter entry #" + i + ": "); 

        //increment counter 
        i++;                

    } //end while 

    //reset counter 
    i = 0; 

    //print out array
    while ( i <= 2 ) { 
        System.out.println(s[i]);
            i++;
    } //end while 
    }//end main

} //end class

ОБНОВЛЕНИЕ: Теперь я получаю другую ошибку:

PushtoArray.java:15: readline(boolean) in java.io.Console cannot be applied to (java.lang.string) 
      s[i]= c.readline("Enter entry #" + i + ": ");

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

Я использую неправильную функцию? Должен ли я использовать метод push вместо присваивания?

Ответы [ 4 ]

4 голосов
/ 22 апреля 2009

Вы уверены, что запускаете javac в нужном файле? Этот файл не может быть скомпилирован.

  1. Вам нужна точка с запятой в операторе импорта:

    import java.io.*;
    
  2. Вы забыли конечную скобку:

    } // end main()
    
  3. Нет такого метода, как readline(). Вам нужно прочитать с System.in. Самый простой способ - сделать Scanner перед циклом, а затем прочитать его в цикле. См. Javadocs для Scanner для примера.

Редактировать: См. Java Tutorials для получения дополнительной информации о чтении из командной строки. Console класс (представлен в Java 6) выглядит так, как будто у него есть метод readLine(), который вы хотели.

Редактировать 2: Вам нужно использовать заглавную строку. Вы написали "readline", но это должно быть "readLine".

1 голос
/ 22 апреля 2009

Возможно, это не то, что вы ищете, но он принимает три аргумента командной строки, сохраняет их в массив, а затем выводит аргументы из нового массива:

public class CommandArray {

    public static void main (String[] args){

        //Set up array to hold command line values
        String[] arr = new String[3];

        //Copy command line values into new array
        for(int i = 0;i < 3;i++)
            arr[i] = args[i];

        //Print command line values from new array
        for(int j = 0; j < 3; j++)
            System.out.print(arr[j] + " ");

            //Extra line for terminal
            System.out.println();
    }
}

Затем, после компиляции кода с помощью javac CommandArray.java, вы можете выполнить его с помощью java CommandArray Arg1 Arg2 Arg3.

Кроме того, я заметил, что в вашем последнем цикле while у вас было:

while(i < 2) {

Если командная строка принимает 3 аргумента, вы напечатаете только 2. Напечатанные индексы массива будут 0 и 1, так как 1 <2. Вы можете изменить его на: </p>

while(i <= 2) {

И не забывайте увеличивать i.

1 голос
/ 22 апреля 2009
//print out array
    while ( i < 2 ) { 
        System.out.println(s[i]);
        i++; //increase counter!
    } //end while 
1 голос
/ 22 апреля 2009

Попробуйте

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

и затем в вашем цикле:

in.readline();

Я бы помещал полученные строки в ArrayList или аналогичный. Таким образом, вы можете принять больше / меньше 3 строк данных (но это необходимо, только если количество строк, которые вы хотите принять, является переменным)

РЕДАКТИРОВАТЬ: Первоначально я думал, что исключение NoSuchMethod выделяет проблему области видимости. Очевидно, нет, и спасибо тем, кто указал на это!

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