Помощь - Поиск - Пользователи - Календарь
Полная версия: [Java] Пулеметчицы против кавалеристок, игра в футбол
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Shashlyk
Добрый Вечер!!!
Помогите Пожалуйста переписать код с Паскаля на Ява:
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

Var
i: Integer;
ch: Char;
Home: Boolean;
scored, conceded, goal1, goal2, t, j: Integer;
s: String;

begin
Read(t);
for j := 1 to t do
Begin
for i := 1 to 27 do Read(ch);
if ch = 'h' then Home := True;
for i := 1 to 17 do Read(ch);
read(scored);
for i := 1 to 21 do Read(ch);
read(conceded);
Readln;
if Home then
Begin
if scored > conceded then
Begin
goal1 := 0;
goal2 := conceded + 30 - scored;
End
else //goal > Accept
Begin
goal1 := conceded - scored + 1;
goal2 := conceded + 29 - scored;
End
End
else //if not home
Begin
if scored > conceded then
Begin
goal1 := 0;
goal2 := conceded + 29 - scored;
End
else //goal > Accept
Begin
goal1 := conceded - scored;
goal2 := conceded + 30 - scored;
End;
End;
Write(IntToStr(goal1) + ' ' + IntToStr(goal2));
End;
end.


У меня что-то не получается:
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner con=new Scanner (System.in);
char [] a;
boolean Home = false;
String s;
s = con.nextLine();
a = new char[s.length()];
a = s.toCharArray();
int i, scored, conceded, goal1 = 0, goal2 = 0, t, j;
t = con.nextInt();
for( j = 1; j< t; j++){
for (i = 1; i < 27; i++){
if (a[i] = 'h'){Home = true;}}
for (i = 1; i< 17; i++ ) Read(ch);
read(scored);
for i := 1 to 21 do Read(ch);
read(conceded);

if (Home){
if( scored > conceded )
{ goal1 = 0;
goal2 = conceded + 30 - scored;}
else //goal > Accept
{goal1 = conceded - scored + 1;
goal2 = conceded + 29 - scored;}
}
else //if not home

{
if (scored > conceded)
{goal1 = 0;
goal2 = conceded + 29 - scored;}
else //goal > Accept
{goal1 = conceded - scored;
goal2 = conceded + 30 - scored;}
}
}
System.out.println(String.valueOf(goal1) + " " + String.valueOf(goal2));

}
}


Особенно не получается перевести :
for i := 1 to 27 do Read(ch);
if ch = 'h' then Home := True;
for i := 1 to 17 do Read(ch);
read(scored);
for i := 1 to 21 do Read(ch);
read(conceded);
Readln;


Добавлено через 10 мин.
Раньше изучал Паскаль, сейчас изучаю Яву... задачу нужно сдавать на Яве, но на ней плохо программирую(
IUnknown
Прежде чем переводить - добейся правильного функционирования программы. У тебя как минимум одна строка результата не совпадает...

А вообще - кому оно надо, читать посимвольно и таким образом вытягивать числа из строки? Особенно в Java, где есть много других средств для этого. Например, регулярные выражения:

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {

public static void main(String[] args) {

Console console = System.console();
Pattern p = Pattern.compile("[0-9]+");

int t = Integer.parseInt(console.readLine());
for(int i = 0; i < t; i++)
{
String s = console.readLine();
Matcher m = p.matcher(s);
m.find();
int scored = Integer.parseInt(m.group());
m.find();
int conceded = Integer.parseInt(m.group());

Boolean Home = s.substring(26, 30).equals("home");
int goal1, goal2;

if(Home)
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 30 - scored;
}
else
{
goal1 = conceded - scored + 1; goal2 = conceded + 29 - scored;
}
}
else
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 29 - scored;
}
else
{
goal1 = conceded - scored; goal2 = conceded + 30 - scored;
}
}
System.out.println(goal1 + " " + goal2);
}
}
}
Правильность работы не проверял.
Shashlyk
Цитата(IUnknown @ 29.05.2011 1:26) *

Прежде чем переводить - добейся правильного функционирования программы. У тебя как минимум одна строка результата не совпадает...

А вообще - кому оно надо, читать посимвольно и таким образом вытягивать числа из строки? Особенно в Java, где есть много других средств для этого. Например, регулярные выражения:

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {

public static void main(String[] args) {

Console console = System.console();
Pattern p = Pattern.compile("[0-9]+");

int t = Integer.parseInt(console.readLine());
for(int i = 0; i < t; i++)
{
String s = console.readLine();
Matcher m = p.matcher(s);
m.find();
int scored = Integer.parseInt(m.group());
m.find();
int conceded = Integer.parseInt(m.group());

Boolean Home = s.substring(26, 30).equals("home");
int goal1, goal2;

if(Home)
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 30 - scored;
}
else
{
goal1 = conceded - scored + 1; goal2 = conceded + 29 - scored;
}
}
else
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 29 - scored;
}
else
{
goal1 = conceded - scored; goal2 = conceded + 30 - scored;
}
}
System.out.println(goal1 + " " + goal2);
}
}
}
Правильность работы не проверял.


Спасибо Вам Большое за помощь!!!
Объясните Пожалуйста вот эту строчку: Pattern p = Pattern.compile("[0-9]+");
почему там от 0 до 9 ?
Как можно переделать код, чтобы можно было тестировать в НетБинсе...
у меня выдаёт:
Exception in thread "main" java.lang.NullPointerException
at timus1804.Main.main(Main.java:15)
Java Result: 1

я хочу проверить на тесте приведённом в http://acm.timus.ru/problem.aspx?space=1&num=1804
Заранее Благодарен! give_rose.gif
IUnknown
Цитата
Объясните Пожалуйста вот эту строчку: Pattern p = Pattern.compile("[0-9]+");
почему там от 0 до 9 ?
Потому что числа состоят из цифр от 0 до 9.

Цитата
Как можно переделать код, чтобы можно было тестировать в НетБинсе...
Без понятия. Я НетБинс не держу, и почему там возникает исключение - не знаю. Консоль - наше всё smile.gif Из консоли тестовый пример прекрасно работает (ну, в смысле, данные читает. А вот результат - неправильный выдает. Но логику уже сам исправляй, у тебя и в Паскалевской программе тоже результат неверный).
Shashlyk
Цитата(IUnknown @ 29.05.2011 11:12) *

Потому что числа состоят из цифр от 0 до 9.

Без понятия. Я НетБинс не держу, и почему там возникает исключение - не знаю. Консоль - наше всё smile.gif Из консоли тестовый пример прекрасно работает (ну, в смысле, данные читает. А вот результат - неправильный выдает. Но логику уже сам исправляй, у тебя и в Паскалевской программе тоже результат неверный).

Если Вам не сложно, напишите Пожалуйста код без консоли smile.gif
IUnknown
package shashlyk;

import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
* @author Vlady
*/
public class Shashlyk {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {

BufferedReader br;
br = new BufferedReader(new InputStreamReader(System.in));

// Console console = System.console();
Pattern p = Pattern.compile("[0-9]+");
int t = Integer.parseInt(br.readLine());

for(int i = 0; i < t; i++)
{
String s = br.readLine();
Matcher m = p.matcher(s);
m.find();
int scored = Integer.parseInt(m.group());
m.find();
int conceded = Integer.parseInt(m.group());

Boolean Home = s.substring(26, 30).equals("home");
int goal1, goal2;
if(Home)
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 30 - scored;
}
else
{
goal1 = conceded - scored + 1; goal2 = conceded + 29 - scored;
}
}
else
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 29 - scored;
}
else
{
goal1 = conceded - scored; goal2 = conceded + 30 - scored;
}
}
System.out.println(goal1 + " " + goal2);
}
}
}



Данные получает, исключений не бросает:
Нажмите для просмотра прикрепленного файла

, но работает по-прежнему не так, как ожидается... Исправляй...
Shashlyk
Цитата(IUnknown @ 29.05.2011 22:32) *

package shashlyk;

import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
* @author Vlady
*/
public class Shashlyk {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {

BufferedReader br;
br = new BufferedReader(new InputStreamReader(System.in));

// Console console = System.console();
Pattern p = Pattern.compile("[0-9]+");
int t = Integer.parseInt(br.readLine());

for(int i = 0; i < t; i++)
{
String s = br.readLine();
Matcher m = p.matcher(s);
m.find();
int scored = Integer.parseInt(m.group());
m.find();
int conceded = Integer.parseInt(m.group());

Boolean Home = s.substring(26, 30).equals("home");
int goal1, goal2;
if(Home)
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 30 - scored;
}
else
{
goal1 = conceded - scored + 1; goal2 = conceded + 29 - scored;
}
}
else
{
if(scored > conceded)
{
goal1 = 0; goal2 = conceded + 29 - scored;
}
else
{
goal1 = conceded - scored; goal2 = conceded + 30 - scored;
}
}
System.out.println(goal1 + " " + goal2);
}
}
}



Данные получает, исключений не бросает:
Нажмите для просмотра прикрепленного файла

, но работает по-прежнему не так, как ожидается... Исправляй...


Исправил на :
if(Home){
if(scored > conceded){
goal1 = 0;
goal2 = conceded + 30 - scored - 1;
}
else {
goal1 = conceded - scored + 1;
goal2 = conceded + 29 - scored;
}
}
else {
if(scored > conceded){
goal1 = 0;
goal2 = conceded + 29 - scored;
}
else {
goal1 = conceded - scored;
goal2 = conceded + 30 - scored;
}
}

Отправил решение на проверку контесту, первый тест (и собственно говоря тот, который написан в качестве примера) спокойно проходит, а вот на втором тесте контест ругается wacko.gif
Если Вам не трудно, помогите Пожалуйста подкорректировать код! smile.gif
Lapp
Цитата(Shashlyk @ 30.05.2011 10:30) *
Отправил решение на проверку контесту, первый тест (и собственно говоря тот, который написан в качестве примера) спокойно проходит, а вот на втором тесте контест ругается wacko.gif
Если Вам не трудно, помогите Пожалуйста подкорректировать код! smile.gif
Спокойно, значит, проходит?..
Ну, что ж, поможем..

Цитата
Исправил на :
if(Home){
if(scored > conceded){
goal1 = 0;
goal2 = conceded + 30 - scored - 1;
}

Вот, смотри.. Допустим, scored=30, а conceded=0, сыграно at home. Оба условия "проходят спокойно" (С), мы присваиваем goal1=0, а goal2 будет равно 0 + 30 - 30 - 1.
В результате имеем, что пулеметчицы должны забить -1 гол. Ты знаешь, что такое футбол? и что там нет отрицательных результатов (как, например, в гольфе)?

Послушай, Merhaba, когда ты выложил весьма неплохой код (чего я не замечал за тобой раньше), я удивился, но промолчал. Когда же ты стал делать к нему заплатки (типа, -1 к строчке), все встало на свои места. Код не твой, и исправлять его для тебя лично я - завязываю. Учишься программировать? Вот и учись программировать, а не подсовывать другим чужие коды для переделки.
Shashlyk
Цитата(Lapp @ 31.05.2011 10:16) *

Спокойно, значит, проходит?..
Ну, что ж, поможем..
Вот, смотри.. Допустим, scored=30, а conceded=0, сыграно at home. Оба условия "проходят спокойно" (С), мы присваиваем goal1=0, а goal2 будет равно 0 + 30 - 30 - 1.
В результате имеем, что пулеметчицы должны забить -1 гол. Ты знаешь, что такое футбол? и что там нет отрицательных результатов (как, например, в гольфе)?

Послушай, Merhaba, когда ты выложил весьма неплохой код (чего я не замечал за тобой раньше), я удивился, но промолчал. Когда же ты стал делать к нему заплатки (типа, -1 к строчке), все встало на свои места. Код не твой, и исправлять его для тебя лично я - завязываю. Учишься программировать? Вот и учись программировать, а не подсовывать другим чужие коды для переделки.

Подскажите хотя бы Пожалуйста, нужно исправить числа в этом коде или это неправильный код, и нужно полностью переписывать?
Shashlyk
Цитата(Lapp @ 31.05.2011 10:16) *

Спокойно, значит, проходит?..
Ну, что ж, поможем..
Вот, смотри.. Допустим, scored=30, а conceded=0, сыграно at home. Оба условия "проходят спокойно" (С), мы присваиваем goal1=0, а goal2 будет равно 0 + 30 - 30 - 1.
В результате имеем, что пулеметчицы должны забить -1 гол. Ты знаешь, что такое футбол? и что там нет отрицательных результатов (как, например, в гольфе)?

Послушай, Merhaba, когда ты выложил весьма неплохой код (чего я не замечал за тобой раньше), я удивился, но промолчал. Когда же ты стал делать к нему заплатки (типа, -1 к строчке), все встало на свои места. Код не твой, и исправлять его для тебя лично я - завязываю. Учишься программировать? Вот и учись программировать, а не подсовывать другим чужие коды для переделки.

У меня что-то не выходит сделать, помогите Пожалуйста:
if(Home){
if(scored > conceded){

goal1 = conceded - scored + 1;
goal2 = conceded - 28 - scored;
}
else {

goal1 = conceded - scored;
goal2 = conceded - scored - 29;
}
}
if (goal1 < 0) goal1 = 0;
if (goal1 > 30) goal1 = 30;
if (goal2 < 0) goal2 = 0;
if (goal2 > 30) goal2 = 30;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.