ввод файла от пользователя - PullRequest
0 голосов
/ 16 февраля 2011

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

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

public class test{
public static void main(String args[]) throws FileNotFoundException {
//File fin = new File ("matrix1.txt");
Scanner scanner = new Scanner(System.in);
scanner.nextLine(); // removes the first line in the input file 
String rowLine = scanner.nextLine();
String[] arr = rowLine.split("=");
int rows = Integer.parseInt(arr[1].trim());

String colLine = scanner.nextLine();
String[] arr2 = colLine.split("=");
int cols = Integer.parseInt(arr2[1].trim());
double [][]matrix = new double [rows][cols];

 for (int i=0; i<rows;i++){
     for (int j=0; j<cols;j++) {
         matrix[i][j]= scanner.nextDouble();
        } 
}


System.out.println(rows);
System.out.println(cols);  

 for (int i=0; i<rows; i++) 
  { for (int j=0;j<cols;j++) {
    System.out.println(matrix[i][j]);
 }   
}   

} }

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Существует одна проблема с кодом. Сканер просто выдаст вам имя файла в виде строки из командной строки. Итак, вам нужно сначала получить аргумент командной строки, а затем создать еще один сканер, используя конструктор, который принимает объект файла. например,

            Scanner scanner = new Scanner(System.in);
    Scanner fileScanner = new Scanner(new File(scanner.nextLine()));
    String rowLine = fileScanner.nextLine();
    System.out.println(rowLine);
    String[] arr = rowLine.split("=");
    int rows = Integer.parseInt(arr[1].trim())
0 голосов
/ 16 февраля 2011

Вы понимаете, что используете только сканер типа System.in, верно?Это означает, что вы даже не смотрите на файл, вы смотрите только на ввод пользователя.Это независимо от того, закомментирована ли первая строка или нет.Чтобы использовать файл, вы можете использовать FileInputStream или пару других классов обработки файлов.

<code>
FileInputStream fs = new FileInputStream(new File("matrix1.txt"));
//do stuff with the stream

Вот java-документация для FileInputStream: http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileInputStream.html

Редактировать: После просмотра вашего комментария о том, что было в действительности, я понял, что с кодом больше проблемчем просто способ обработки ввода.Ваша ошибка почти наверняка происходит в одном из первых двух методов доступа к массиву, вызовах arr 1 .trim ().Это означает, что пользовательский ввод не имеет ничего справа от знака "=", или в пользовательском вводе нет знака "=".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...