मैं वर्तमान में उपयोगकर्ता इनपुट मानों के साथ 2 डी सरणी भरने के लिए जावा में एक प्रोग्राम पर काम कर रहा हूं। प्रोग्राम पूरी तरह से काम करता है जब दोनों पंक्तियों और स्तंभों को समान मान (वर्ग मैट्रिक्स) के लिए निर्दिष्ट किया जाता है। लेकिन, जब मान भिन्न होते हैं, तो यह एक इंडेक्स को सीमा अपवाद से बाहर प्रिंट और फेंकता नहीं है और मुझे यह पता लगाना प्रतीत नहीं होता है। मैंने नीचे अपना कोड संलग्न किया है।

public static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    int x; //columns
    int y; //rows

    System.out.println("Enter the number of rows of the matrix:");
    y = console.nextInt();
    System.out.println("Enter the number of columns of the matrix:");
    x = console.nextInt();

    int[][] matrix = new int[y][x];
    fillMatrix(y, x, matrix);
}
public static void fillMatrix(int row, int col, int[][] matrix) {
    Scanner console = new Scanner(System.in);
    int quantity = (row * col); //number of numbers in matrix
    System.out.println("Please enter " + quantity +
            " integers separated by spaces:");
    for (int cinput = 0; cinput < row; cinput++) { //column
        for (int rinput = 0; rinput < col; rinput++) { //row
            //Read the line of integers to fill positions in the array.
            matrix[cinput][rinput] = console.nextInt();
        }
    }
    System.out.println();
    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {
            //Outputs the array in a xy grid.
            System.out.print(matrix[i][j] + " ");
        }
        System.out.println();
    }
}
0
PmacSweezY 29 मार्च 2020, 20:33
अपने आउटपुट कोड में, i और j का क्रम बदलें। इसलिए matrix[i][j] को matrix[j][i] में बदलें। और आपको शायद for लूप के क्रम को भी स्वैप करना चाहिए ताकि पंक्ति बाहर की तरफ हो और कॉलम अंदर की तरफ हो।
 – 
Idle_Mind
29 मार्च 2020, 20:45
शुक्रिया! इसने मेरा मुद्दा ठीक कर दिया!
 – 
PmacSweezY
29 मार्च 2020, 21:19

2 जवाब

मैं क्या करूंगा उन सभी नंबरों की एक प्रति बनाऊंगा जिन्हें आपको मैट्रिक्स में डालने की आवश्यकता है। एक काउंटर पकड़ो जिसे केवल तभी बढ़ाया जाएगा जब आप मैट्रिक्स में कोई मान डालते हैं। काउंटर को तब तक बढ़ाना जारी रखें जब तक आपके पास डालने के लिए कोई और मूल्य न हो। जब आप कर लें तो बस लूप से बाहर निकल जाएं।

कुछ इस तरह

Scanner myScanner = new Scanner (System.in);
int x; //columns
int y; //rows 
System.out.println("Enter the number of rows of the matrix:");
y = myScanner.nextInt();
System.out.println("Enter the number of columns of the matrix:");
x = myScanner.nextInt();

int [][] matrix = new int [x][y]; 


myScanner.nextLine();
System.out.println("Enter the numbers seperated by space:");
String input = myScanner.nextLine();

String tmp            [] = input.split(" "); //holds the numbers that are inputted (String)
int    numbers        [] = new int[tmp.length];//array that holds the parsed numbers

for(int i = 0 ; i <numbers.length; i++)
  numbers[i] = (int)(tmp[i].charAt(0) - '0');  //parsing the numbers

// Logic that matters
int counter = 0; 

for(int k = 0; k < matrix.length && counter < numbers.length; k++)
{
 for(int j = 0 ; counter < numbers.length &&  j < matrix[k].length; j++)
 {
     matrix[k][j] = numbers[counter];
     System.out.print(matrix[k][j]+" ");
     counter = counter + 1; 
 }
 System.out.println("");
}

इनपुट-

Enter the number of rows of the matrix:
3
Enter the number of columns of the matrix:
1
Enter the numbers seperated by space:
1 2 3

आउटपुट -

१ २ ३

0
RRIL97 29 मार्च 2020, 20:58

अपने आउटपुट कोड में, i और j का क्रम बदलें।

तो बदलें:

matrix[i][j]

प्रति:

matrix[j][i]

और आपको शायद लूप के क्रम को भी स्वैप करना चाहिए ताकि पंक्ति बाहर की तरफ हो और कॉलम अंदर की तरफ हो।

सब एक साथ, ऐसा दिखेगा:

System.out.println();
for(int j = 0; j < row; j++)
{
    for(int i = 0; i < col; i++)
    {
        System.out.print(matrix[j][i] + " ");
    }
    System.out.println();
}
0
Idle_Mind 29 मार्च 2020, 22:43