Помощь - Поиск - Пользователи - Календарь
Полная версия: [Java] неправильно считывает входной файл
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Shashlyk
Доброе Утро!
Помогите Пожалуйста переделать код:
Формат входного файла input.txt
Первая строка - целые числа M и N через пробел (1 <= M, N <= 1000)
Каждая из следующих строк содержит одно целое число K - номер строки и
далее через пробел N вещественных чисел - значения элементов строки
Последняя строка содержит единственное число 0
Пример входного файла
2 3
2 3.49 -5.108 6.31
1 18.4 -8.567 2
0

Мой код:

int N, M;
int [] a;
double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
con.useLocale(Locale.US);
array = new double[M][N];
a = new int[M];
int k = con.nextInt();
while (k>0 && k<M+1){
a[k-1] = a[k-1]+k;
for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
k = con.nextInt();
if (k == 0){break;}
}
fin.close();
IUnknown
Про массив a в условии ничего не сказано, не надо придумывать проблемы, которых нет:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
M, N и array заполняются корректно.
Shashlyk
Цитата(IUnknown @ 10.06.2011 10:34) *

Про массив a в условии ничего не сказано, не надо придумывать проблемы, которых нет:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
M, N и array заполняются корректно.

мне нужно было это, чтобы решить вот эту задачу: http://contest.samara.ru/ru/problemset/529/
Помогите Пожалуйста доделать:
void SolutionOfTask () throws FileNotFoundException{

PrintWriter fout=new PrintWriter("output.txt");
String str = "YES";
for (int i=0; i < M; i++){
if (a[i]!=i+1){
str = "NO";
fout.print(str);
break;
}
}
if (str.equals("YES")){
fout.print(str);
for (int i=0; i<M; i++){
fout.println();
fout.printf(Locale.US," %.3f",array[i][0]);
for (int j=1; j<N; j++){
fout.printf(Locale.US," %.3f",array[i][j]);
}
}
}
fout.flush();
fout.close();
}
}

как можно переделать код без массива а ?
IUnknown
Для этого существует множество:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
BitSet bs = new BitSet(M); // Вот тут будем хранить информацию строках, которые надо прочесть
bs.set(0, M); // Изначально установим всё в True
boolean Ok = true; // Признак, показывающий, всё ли идёт успешно?
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
if(bs.get(k-1)) { // Строку k-1 еще не читали?
bs.clear(k-1); // Нет, значит просто сбрасываем ее номер, уже прочитана
}
else {
Ok = false; // Ух ты! Она уже раньше была прочитана... Ошибка...
}

for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
if(!bs.isEmpty()) { // Может, пропустили какую-то строку? Если множество не ПУСТОЕ =>
// Ошибка. как минимум одной строки не хватает. Можно воспользоваться
// nextSetBit, чтобы выяснить, какие именно строки не считывались...
Ok = false;
}

Используй возможности языка, Java тебе их предоставляет ОГРОМНОЕ количество...
Krjuger
В связи с ответом пост отпадает за ненадобностью...
Shashlyk
Цитата(IUnknown @ 10.06.2011 12:14) *

Для этого существует множество:

    double [][]array;
FileReader fin = new FileReader ("input.txt");
Scanner con = new Scanner (fin);
M = con.nextInt();
N = con.nextInt();
BitSet bs = new BitSet(M); // Вот тут будем хранить информацию строках, которые надо прочесть
bs.set(0, M); // Изначально установим всё в True
boolean Ok = true; // Признак, показывающий, всё ли идёт успешно?
con.useLocale(Locale.US);
array = new double[M][N];
int k;
do {
k = con.nextInt();
if(k > 0) {
if(bs.get(k-1)) { // Строку k-1 еще не читали?
bs.clear(k-1); // Нет, значит просто сбрасываем ее номер, уже прочитана
}
else {
Ok = false; // Ух ты! Она уже раньше была прочитана... Ошибка...
}

for (int i=0; i<N; i++){
array[k-1][i]=con.nextDouble();
}
}
} while(k > 0);
if(!bs.isEmpty()) { // Может, пропустили какую-то строку? Если множество не ПУСТОЕ =>
// Ошибка. как минимум одной строки не хватает. Можно воспользоваться
// nextSetBit, чтобы выяснить, какие именно строки не считывались...
Ok = false;
}

Используй возможности языка, Java тебе их предоставляет ОГРОМНОЕ количество...

А как тогда можно переделать вывод в файл?
Мой код не работает для такого способа:
PrintWriter fout=new PrintWriter("output.txt");
if (str.equals("YES")){
fout.print(str);
for (int i=0; i<M; i++){
fout.println();
fout.printf(Locale.US," %.3f",array[i][0]);
for (int j=1; j<N; j++){
fout.printf(Locale.US," %.3f",array[i][j]);
}
}
}
fout.flush();
fout.close();
IUnknown
Я не знаю, что у тебя все время не получается. Не получается - учи язык, а не берись за непосильные задачи. Смысл какой в том, что за тебя кто-то решает задания? Мне эти задания неинтересны, понимаешь ты это? НЕИНТЕРЕСНЫ. Они должны быть интересны тебе, но чтобы их решать - надо как минимум знать синтаксис языка и его управляющие структуры.

PrintWriter fout=new PrintWriter("\\home\\java\\test\\output.txt");
fout.printf(Locale.US, "%s", (Ok ? "YES" : "NO"));
for (int i=0; i<M; i++){
fout.println();
fout.printf(Locale.US," %.3f",array[i][0]);
for (int j=1; j<N; j++){
fout.printf(Locale.US," %.3f",array[i][j]);
}
}
fout.flush();
fout.close();
прекрасно выводит ответ в нужном формате. Все, больше моих решений не жди. Скучно с тобой. Только и добиваешься того, чтоб ВСЁ сделали за тебя, чтоб случайно самому не перетрудиться... Пока ни одного полностью работоспособного кода от тебя не было - какой-то бред все время. И не надо прикрываться тем, что ты раньше писал на Паскале, а теперь, видите ли перешел на Java и не понимаешь, как тут и что делать. Во-первых, прошло уже достаточно времени, чтоб научиться, а во-вторых, ЧТО ты там писал на Паскале - это еще тоже большой вопрос. То, что у тебя получилось откомпилировать и запустить "Hello World", скопированный с какого-нибудь форума - это не повод говорить, что ты знаешь язык...
Shashlyk
Цитата(IUnknown @ 12.06.2011 21:13) *

Я не знаю, что у тебя все время не получается. Не получается - учи язык, а не берись за непосильные задачи. Смысл какой в том, что за тебя кто-то решает задания? Мне эти задания неинтересны, понимаешь ты это? НЕИНТЕРЕСНЫ. Они должны быть интересны тебе, но чтобы их решать - надо как минимум знать синтаксис языка и его управляющие структуры.

PrintWriter fout=new PrintWriter("\\home\\java\\test\\output.txt");
fout.printf(Locale.US, "%s", (Ok ? "YES" : "NO"));
for (int i=0; i<M; i++){
fout.println();
fout.printf(Locale.US," %.3f",array[i][0]);
for (int j=1; j<N; j++){
fout.printf(Locale.US," %.3f",array[i][j]);
}
}
fout.flush();
fout.close();
прекрасно выводит ответ в нужном формате. Все, больше моих решений не жди. Скучно с тобой. Только и добиваешься того, чтоб ВСЁ сделали за тебя, чтоб случайно самому не перетрудиться... Пока ни одного полностью работоспособного кода от тебя не было - какой-то бред все время. И не надо прикрываться тем, что ты раньше писал на Паскале, а теперь, видите ли перешел на Java и не понимаешь, как тут и что делать. Во-первых, прошло уже достаточно времени, чтоб научиться, а во-вторых, ЧТО ты там писал на Паскале - это еще тоже большой вопрос. То, что у тебя получилось откомпилировать и запустить "Hello World", скопированный с какого-нибудь форума - это не повод говорить, что ты знаешь язык...


Цитата
"Не получается - учи язык, а не берись за непосильные задачи. "
- я учу. Дайте совет( если не сложно), как можно выучить его хорошо! Порекомендуйте литературу, по которой учили Вы! smile.gif
Цитата
"Только и добиваешься того, чтоб ВСЁ сделали за тебя"
- я и сам пытаюсь сделать, только у меня плохо это получается wacko.gif
Цитата
"какой-то бред все время"
- некоторые коды работали правильно smile.gif
Порекомендуйте какие-нить методы и источники по которым можно также хорошо научится программировать, как и Вы smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.