2016-07-19 2 views
-1

Исходя из ruby ​​/ rails У меня много трудностей с использованием Java-логики.java - присвоить значение массиву int [] в цикле do-while

Вопрос - как назначить значения (считанные из stdin) массивам целых чисел в цикле do-while, чтобы использовать эти массивы позже в более поздних методах?

Вот мой фрагмент кода:

void triAnglePerimeter() { 
     //int[][] arrs; 
     //int[] edge1, edge2, edge3 = new int[]; 
     do { 
      System.out.print("X, Y for edge 1: "); 
      int[] edge1 = {Ch3Ex.stdin.nextInt(),Ch3Ex.stdin.nextInt()}; 
      System.out.print("X, Y for edge 2: "); 
      int[] edge2 = {Ch3Ex.stdin.nextInt(),Ch3Ex.stdin.nextInt()}; 
      System.out.print("X, Y for edge 3: "); 
      int[] edge3 = {Ch3Ex.stdin.nextInt(),Ch3Ex.stdin.nextInt()}; 
      int[][] arrs = {edge1,edge2,edge3}; 

      if (!(TriangleHelpers.inputValidityChecker(arrs))) 
       System.out.println("Wrong input. Retype."); 

     } while(!(TriangleHelpers.inputValidityChecker(arrs))); 

     Triangle triAngle = new Triangle(); 
     triAngle.computeSides(arrs); 

     System.out.printf("Triangle perimeter == %.2f\n", triAngle.perimeter()); 
    } 

==================

Ch3Ex.stdin.nextInt(); - объект сканера, который считывает System.in

==================

консоли ошибок:

Tasks3.java:209: error: cannot find symbol 
     } while(!(TriangleHelpers.inputValidityChecker(arrs))); 
                ^
    symbol: variable arrs 
    location: class Tasks3 
Tasks3.java:212: error: cannot find symbol 
     triAngle.computeSides(arrs); 
          ^
    symbol: variable arrs 
    location: class Tasks3 
2 errors 

Если Я:

  • без досуга, все работает отлично;

  • объявлять массивы выше делать-то время и удалить объявления в то время как делать-только оставив:

    EDGE1 = {Ch3Ex.stdin.nextInt(), Ch3Ex.stdin.nextInt()};

тогда я получаю Tasks3.java:199: error: illegal start of expression edge1 = {Ch3Ex.stdin.nextInt(),Ch3Ex.stdin.nextInt()};

  • декларация и память назначения вне делать-то время:

    ИНТ [] side1 = новый INT [2];

и внутри делать-то время присваивают значения отдельно:

side[0] = Ch3Ex.stdin.nextInt(); 

все работает отлично.

========

Где моя проблема понимания логики массивов + петли

+1

Использовать 'edge1 = new int [] {Ch3Ex.stdin.nextInt(), Ch3Ex.stdin.nextInt()};' вместо 'edge1 = {Ch3Ex.stdin.nextInt(), Ch3Ex.stdin.nextInt ()}; '. –

ответ

0

Решение:

Объявить

int[][] arrs; 
int[] edge1, edge2, edge3; 

снаружи do-while loop.

Внутри делать-то время цикла сделать следующее:

edge1 = new int[]{Ch3Ex.stdin.nextInt(),Ch3Ex.stdin.nextInt()}; 

для каждого 1-тусклого массива и

arrs = new int[][]{edge1,edge2,edge3}; 

для 2-тусклого массива.

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