Доброе Утро! Помогите Пожалуйста переделать код: Формат входного файла 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
10.06.2011 13: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 заполняются корректно.
Shashlyk
10.06.2011 14:39
Цитата(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);
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
10.06.2011 15: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 тебе их предоставляет ОГРОМНОЕ количество...
Krjuger
10.06.2011 15:15
В связи с ответом пост отпадает за ненадобностью...
Shashlyk
12.06.2011 21:50
Цитата(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
13.06.2011 0:13
Я не знаю, что у тебя все время не получается. Не получается - учи язык, а не берись за непосильные задачи. Смысл какой в том, что за тебя кто-то решает задания? Мне эти задания неинтересны, понимаешь ты это? НЕИНТЕРЕСНЫ. Они должны быть интересны тебе, но чтобы их решать - надо как минимум знать синтаксис языка и его управляющие структуры.
прекрасно выводит ответ в нужном формате. Все, больше моих решений не жди. Скучно с тобой. Только и добиваешься того, чтоб ВСЁ сделали за тебя, чтоб случайно самому не перетрудиться... Пока ни одного полностью работоспособного кода от тебя не было - какой-то бред все время. И не надо прикрываться тем, что ты раньше писал на Паскале, а теперь, видите ли перешел на Java и не понимаешь, как тут и что делать. Во-первых, прошло уже достаточно времени, чтоб научиться, а во-вторых, ЧТО ты там писал на Паскале - это еще тоже большой вопрос. То, что у тебя получилось откомпилировать и запустить "Hello World", скопированный с какого-нибудь форума - это не повод говорить, что ты знаешь язык...
Shashlyk
14.06.2011 3:13
Цитата(IUnknown @ 12.06.2011 21:13)
Я не знаю, что у тебя все время не получается. Не получается - учи язык, а не берись за непосильные задачи. Смысл какой в том, что за тебя кто-то решает задания? Мне эти задания неинтересны, понимаешь ты это? НЕИНТЕРЕСНЫ. Они должны быть интересны тебе, но чтобы их решать - надо как минимум знать синтаксис языка и его управляющие структуры.
прекрасно выводит ответ в нужном формате. Все, больше моих решений не жди. Скучно с тобой. Только и добиваешься того, чтоб ВСЁ сделали за тебя, чтоб случайно самому не перетрудиться... Пока ни одного полностью работоспособного кода от тебя не было - какой-то бред все время. И не надо прикрываться тем, что ты раньше писал на Паскале, а теперь, видите ли перешел на Java и не понимаешь, как тут и что делать. Во-первых, прошло уже достаточно времени, чтоб научиться, а во-вторых, ЧТО ты там писал на Паскале - это еще тоже большой вопрос. То, что у тебя получилось откомпилировать и запустить "Hello World", скопированный с какого-нибудь форума - это не повод говорить, что ты знаешь язык...
Цитата
"Не получается - учи язык, а не берись за непосильные задачи. "
- я учу. Дайте совет( если не сложно), как можно выучить его хорошо! Порекомендуйте литературу, по которой учили Вы!
Цитата
"Только и добиваешься того, чтоб ВСЁ сделали за тебя"
- я и сам пытаюсь сделать, только у меня плохо это получается
Цитата
"какой-то бред все время"
- некоторые коды работали правильно Порекомендуйте какие-нить методы и источники по которым можно также хорошо научится программировать, как и Вы
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.