2016-10-28 2 views
0

Я хотел бы иметь две подпрограммы createArray() и print(). Print() потребует переменную multArray от createArray(), и я написал программу так, чтобы массив не был создан локально в основном. Я понимаю, что я мог бы установить createArray, так как createArray(int a, int b), однако я решил против него. Будет ли это возвращаться, чтобы укусить меня сейчас или есть ли еще способ для меня сделать это без внесения предложенных изменений?Есть ли способ печати multArray в подпрограмме print() из createArray()?

import java.util.*; 
import java.io.*; 

public class Array { 

    public static void main(String[] args) { 

     Scanner scan = new Scanner(System.in); 
     String newLine = System.lineSeparator(); 
     String choiceInput; 
     boolean stop = false; 
     boolean firstTime = true; 


     while (stop == false){ 

      if (firstTime == true) { 
       System.out.println("Welcome To The Multiplications Table Creator!" + newLine + newLine + "Would you like to:" + newLine + newLine + "Create   Print   Exit" + newLine + newLine + "Please enter one of the above in the space below: "); 
      } 
      else { 
       System.out.println("Welcome Back!" + newLine + newLine + "Would you like to:" + newLine + newLine + "Create   Print   Exit" + newLine + newLine + "Please enter one of the above in the space below: "); 
      } 
      choiceInput = scan.nextLine().toUpperCase(); 

      if (choiceInput.equals("CREATE")) { 
       createArray(); 
       firstTime = false; 

       for (int count = 0; count < 10; count++) { 
        System.out.println(newLine); 
       } 

      } 
      else if (choiceInput.equals("PRINT")) { 
       print(); 
       firstTime = false; 
      } 
      else if (choiceInput.equals("EXIT")) { 
       for (int count = 0; count < 10; count++) { 
        System.out.println(newLine); 
       } 
       System.out.print("Thank you for using the program!"); 
       for (int count = 0; count < 2; count++) { 
        System.out.println(newLine); 
       } 
       stop = true; 
      } 
      else System.out.println("You did not enter one of the above!"); 
     } 
    } 

    public static int[][] createArray() { 

     Scanner s = new Scanner(System.in); 
     String newLine = System.lineSeparator(); 
     int a; 
     int b; 

     System.out.print("How big would you like your multiplication table to be? (A x B)" + newLine + "A: "); 
     a = s.nextInt(); 
     System.out.println(a + " x "); 
     b = s.nextInt(); 

     int[][] multArray = new int[a][b]; 

     for (int countA = 1; countA <= a; countA++) { 
      for (int countB = 1; countB <= b; countB++) { 
       multArray[countA - 1][countB - 1] = countA * countB; 
      } 

     } 
     System.out.print("Creating ."); 
     delay(1000); 
     System.out.print(" ."); 
     delay(1000); 
     System.out.print(" ."); 
     delay(1000); 
     System.out.println(newLine + "Done."); 
     return multArray; 

    } 

    public static void print() { 
     **//This is where I need to print multArray created above is it possible?** 
    } 

    public static void delay(int millis) { 
     try { 
      Thread.sleep(millis); 
     } 
     catch (InterruptedException exp) { 
     } 
    } 
} 
+1

sidenote 1: определить глобальный сканер и повторно использовать его, не нужно определять несколько из них. sidenote 2: 'if (! stop)' и 'if (firstTime)' читает себя лучше, чем сравнение с значением bool в моих глазах. – SomeJavaGuy

+0

Вы не сохранили результат функции 'createArray()', поэтому вы не можете использовать 'print()' правильно с тех пор. Вам нужно будет сохранить его как частный член, а затем получить доступ к нему в 'print()' или передать его как параметр 'print()'. – Ghost93

+0

Является ли 'return multArray',' недостаточным в этом случае? С точки зрения кода, что это потребует от меня? –

ответ

1

Вашего метод createArray возвращает int[][] массива, так что вы можете сделать что-то вроде этого

int[][] multiArray = createArray();// хранение результатов метода создания массива в multiArray

Теперь изменить метод print к принимаем массив int[][], что-то вроде этого

public static void print(int[][] multiArray);метода // печатает, который принимает ИНТ [] [] массив как параметр

проход multiArray для печати метода при вызове метода печати что-то вроде этого

print(multiArray)// проходящего ранее исхода createArray, который multiArray для печати метод.

Теперь внутри метода печати вы можете распечатать multiArray.

+0

Хорошо спасибо за помощь, однако, где в коде будет 'int [] [] multiArray = createArray();' go? –

+0

Место, где вы вызываете метод createArray. Его внутри это, если условие 'if (choiceInput.equals (" CREATE ")), просто замените эту строку' createArray(); 'на' int [] [] multiArray = createArray(); '. – Ravikumar

+0

Большое спасибо за помощь! –

0

Вы хотите выполнить итерацию по оси y- и x. Этот пример должен печатать все элементы строки для каждого столбца. Поэтому первый цикл for итерации повторяется через ваши строки, а второй - через каждый элемент в отдельной строке.

public static void printArray(int[][] multArray) { 
    for(int i = 0; i < multArray.lenght(); i++) 
     { 
      for(int j = 0; j < multArray[i].lenght(); j++) 
      { 
      System.out.printf("%5d ", multArray[i][j]); 
      } 
      System.out.println(); 
     } 
Смежные вопросы