Как устранить эту ошибку? Исключение в потоке «main» java .util.NoSuchElementException - PullRequest
0 голосов
/ 06 августа 2020

Я написал код для умножения двух многомерных массивов.

input-2

2 3
1 2 3
4 5 6
3 2
2 3
1 2
2 1
2 2
12 4
7 6
2 3
2 4 6
3 5 7 

Это код, который я написал, но он показывает Exception in thread "main" java.util.NoSuchElementException.

import java.util.Scanner;
// Other imports go here, Do NOT change the class name
class Main
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in); 
    int n = sc.nextInt(); 
    int x,y,l,m;
    while(n!=0) 
    {  
      x=sc.nextInt(); 
      y=sc.nextInt();
    int a[][] = new int[x][y]; 
      for(int i=0;i<x;i++) 
        for(int j=0;j<y;j++) 
          a[i][j] = sc.nextInt(); 
       l=sc.nextInt(); 
      m=sc.nextInt();
    int b[][] = new int[l][m]; 
      for(int i=0;i<l;i++) 
        for(int j=0;j<m;j++) 
          b[i][j] = sc.nextInt(); 
      int c[][] = new int[x][m]; 
      for(int i=0;i<x;i++) 
      { 
      for(int j=0;j<m;j++) 
      { 
      c[i][j]=0; 
        for(int k=0;k<l;k++) 
        { 
        c[i][j]+=a[i][k]*b[k][j];
        } 
        System.out.print(c[i][j] + " ");
      } 
        System.out.println();
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Есть 2 проблемы с вашим вводом и 1 проблема с вашим кодом.

Проблемы с вашим вводом:

  1. Что я понимаю из кода и ввода, который вы разместили в вопрос в том, что вы хотите, чтобы l oop запускался два раза. Но вы забыли ввести значение n во входных данных. Таким образом, вам необходимо добавить 2 в качестве первой строки.
  2. Сканеру требуется разделитель после последней строки ввода, поэтому вам нужно вставить новую строку после последней строки ввода, чтобы последняя фактическая строка ваш ввод, который равен '3 5 7', принимается кодом сканера.

Таким образом, ваш ввод будет примерно таким:

2 2 3 1 2 3 4 5 6 3 2 2 3 1 2 2 1 2 2 12 4 7 6 2 3 2 4 6 3 5 7

Теперь проблема с вашим кодом. Вам нужно добавить n-- в конце while l oop, иначе получится бесконечное l oop.

0 голосов
/ 06 августа 2020

TL; DR: ваша программа ожидает большего количества входных данных, чем вы предоставили.

Обратите внимание на строку:

while(n!=0)

Исходя из образца ввода, я предполагаю, что вы хотите делать сложение только один раз. В этом случае вы должны использовать

if(n!=0)

Однако, если вы хотите повторить операцию несколько раз для разных входных массивов, измените значение n после каждой итерации, чтобы предотвратить бесконечное l oop. Также убедитесь, что вы указали требуемый размер ввода.

...