私は学校の研究室で働いているので、助けていただければ幸いですが、これを解決したくありません。私はNetBeansで作業しており、主な目標は、テキストファイルから整数をスキャンして「2次元」配列を作成することです。これまでのところ、プログラムはエラーなしで実行されていますが、配列の最初の列がありません。私の入力は次のようになります:
6
3
0 0 45
1 1 9
2 2 569
3 2 17
2 3 -17
5 3 9999
-1
ここで、6は行数、3は列数、-1は番兵です。私の出力は次のようになります:
0 45
1 9
2 569
2 17
3 -17
3 9999
End of file detected.
BUILD SUCCESSFUL (total time: 0 seconds)
ご覧のとおり、最初の列が欠落していることを除いて、すべてが正しく印刷されます。
これが私のプログラムです:
import java.io.*;
import java.util.Scanner;
public class Lab3
{
public static void main(String[] arg) throws IOException
{
File inputFile = new File("C:\\Users\\weebaby\\Documents\\NetBeansProjects\\Lab3\\src\\input.txt");
Scanner scan = new Scanner (inputFile);
final int SENT = -1;
int R=0, C=0;
int [][] rcArray;
//Reads in two values R and C, providing dimensions for the rows and columns.
R = scan.nextInt();
C = scan.nextInt();
//Creates two-dimensional array of size R and C.
rcArray = new int [R][C];
while (scan.nextInt() != SENT)
{
String line = scan.nextLine();
String[] numbers = line.split(" ");
int newArray[] = new int[numbers.length];
for (int i = 1; i < numbers.length; i++)
{
newArray[i] = Integer.parseInt(numbers[i]);
System.out.print(newArray[i]+" ");
}
System.out.println();
}
System.out.println("End of file detected.");
}
}
明らかに、ここには論理的なエラーがあります。最初の列が表示されない理由を誰かに説明してもらえますか?rcArrayのみを使用できる方法はありますか、それともrcArrayとnewArrayの両方を保持する必要がありますか?また、ファイルパスがそれほど長くならないように、ファイルパスを「input.txt」とだけ読み取るようにするにはどうすればよいですか?ファイル"input.txt"はLab3srcフォルダー(プログラムと同じフォルダー)にあるので、File inputFile = new File( "input.txt");を使用できると思いました。ファイルを見つけるために、しかし私はできません。
//編集
コードのこの部分を変更しました。
for (int i = 0; i < numbers[0].length(); i++)
{
newArray[i] = Integer.parseInt(numbers[i]);
if (newArray[i]==SENT)
break;
System.out.print(newArray[i]+" ");
}
System.out.println();
プログラムを実行すると(1ではなく0から開始)、次の出力が得られます。
0
1
2
3
2
5
これはたまたま最初の列です。:)私はどこかに行きます!
//編集2
誰かが気にする場合に備えて、私はすべてを理解しました。:)あなたの助けとフィードバックのすべてに感謝します。