2013-11-12 3 views
0

У меня есть назначение, где мне нужно настроить массив, который формируется пользователем (через строку cmd), пользователь определяет длину и номера в ней. Я не могу заставить его запрашивать пользователя вообще, но никаких ошибок не возникает, когда я запускаю его.Java-массивы (в JRE)

Это то, что я до сих пор:

class hw8064 { 
     static void createArray(int x1, int y1){ 

    int numElements; 

    double[] a1; 
    a1 = new double[x1]; 
    double[] a2; 
    a2 = new double[y1]; 
    for (int i=0; i<=a1.length; i++){ 
     System.out.println("Please enter a double for array 1[<i>] and one for array 2[<i>]:"); 
    } 


    } 
    public static void main(String [] args){ 
     int numElements; 
     if (args.length > 0){ 
      try{ 
       numElements = Integer.parseInt(args[0]); 
      } catch (NumberFormatException e){ 
       System.out.println("Argument must be an integer"); 
       System.exit(1); 
       } 
      } 
     } 
    } 

Кроме того, я знаю, что нужно положить что-то для аргументов, когда я настроить файл проекта, чтобы иметь возможность анализировать Int в JRE, но я м не знаю что. Заранее благодарим за помощь!

EDIT: У меня есть это в основном создана, за исключением я не могу найти переменную сейчас ...

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

класс hw8064 {

public static void createArray(double x1, double y1, int numElements) { 
    Scanner in = new Scanner(System.in); 

    double a1[] = {x1}; 
    a1 = new double[numElements]; 
    double a2[] = {y1}; 
    a2 = new double[numElements]; 
    for (int i = 0; i <= a1.length; i++) { 
     System.out.println("Please enter a double for array 1[<" + i + ">]and one for array 2[<" + i + ">]:"); 

    } 

} 

public static void main(String[] args) { 

    if (args.length > 0) { 

     try { 
      int numElements = Integer.parseInt(args[0]); 

     } catch (NumberFormatException e) { 
      System.out.println("Argument must be an integer"); 
      System.exit(1); 
     } 
     try { 
      int numElements = Integer.parseInt(args[0]); 
     } catch (ArrayIndexOutOfBoundsException e) { 
      System.out.println("Please enter an integer for the argument"); 
      System.exit(1); 
     } 

    } 
    createArray(***numElements***); 
} 

}

последняя строка, где я вызываю метод дает мне проблемы

+4

Где вы ожидаете вход? –

+0

, потому что вы не вызываете createArray() в основной функции – Satya

+0

Ваш код просто анализирует аргумент и сразу же выходит. Используйте методы из 'System.in', чтобы получить пользовательский ввод. – SJuan76

ответ

1

Вы должны вызвать ваш метод creatArray в вашем main как это

public static void main(String [] args){ 
    int numElements; 
    if (args.length > 0){ 
     try{ 
      numElements = Integer.parseInt(args[0]); 
     } catch (NumberFormatException e){ 
      System.out.println("Argument must be an integer"); 
      System.exit(1); 
     } 
    } 

    createArray(numElements); 
} 

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

static void createArray(int numElements){ 
    double[] a1 = new double[x1]; 

    for (int i=0; i<=a1.length; i++){ 
     System.out.println(
        "Please enter a double for array [<" + i + ">] " 
        + "and one for array 2[<" + i + ">]:"); 
} 

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

if (args.length != 2){ 
    System.out.println(Usage: numOfElements1 numOfElments2); 
    System.exit(0); 
} else { 
    try { 

    } catch (.....) { 

    } 
} 

Edit: полная

public static void main(String[] args){ 
    int num1; 
    int num2; 

    if (args.length != 2){ 
     System.out.println(Usage: numOfElements1 numOfElments2); 
     System.exit(0); 
    } else { 
     try { 
      num1 = Integer.parseInt(args[0]); 
      num2 = Integer.parseInt(args[1]); 

     } catch (Exception ex) { 
      System.out.println("Arguments must be an integers"); 
      System.exit(1); 
     } 
    } 
    createArray(num1, num1); 
} 

static void createArray(int num`, int num2){ 
    double[] a1 = new double[num1]; 
    double[] a2 = new double[num2]; 

    Scanner scanner = new Scanner(System.in); 

    for (int i=0; i<=a1.length; i++){ 
     System.out.println(
        "Please enter a double for array1[<" + i + ">] "); 
     double number1 = scanner.nextDouble(); 
     a1[i] = number1; 

     System.out.println(
        "Please enter a double for array2[<" + i + ">] "); 
     double number2 = scanner.nextDouble(); 
     a2[i] = number2;    
    } 
} 
+0

Не было бы у меня технически два параметра? Учитывая, что у меня созданы два массива? – Indyvette

+0

Да, но у вас оригинальная 'main', у вас есть только одна переменная для' mumElements'. Я просто дал вам альтернативу. Но да, если вам нужны два параметра, вы должны перейти к аргументам из линии cammand, а затем вызвать метод с двумя аргументами. Следите за моим редактированием. –

+0

@Indyvette, см. Мое редактирование. –

Смежные вопросы