こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[至急!]Javaのプログラミング

野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。


import java.io.*;
public class test1 {

public static void main(String[] args) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//String str=br.readLine();
//char hantei=str.charAt(0);
int sc=0,bc=0,oc=0;

while(oc<3){
String str=br.readLine();
char hantei=str.charAt(0);
if(hantei=='s')
{
sc=sc+1;
if(sc==3)
oc=oc+1;
sc=0;
bc=0;
}
else if(hantei=='b')
{
bc=bc+1;
if(bc==4)
sc=0;
bc=0;
}
else if(hantei=='o')
{
oc=oc+1;
sc=0;
bc=0;
}
else
{
System.out.println("入力が違います。");
}
}
System.out.print("B ");
for(int i=0;i<=bc;i++){
System.out.print("〇");
}
System.out.println("");

System.out.print("S ");
for(int i=0;i<=sc;i++){
System.out.print("〇");
}
System.out.println("");

System.out.print("O ");
for(int i=0;i<=oc;i++){
System.out.print("〇");
}
System.out.println("");
}
}

出力例
s(入力)
B
S 〇
O

s(入力)
B
S 〇〇
O

s(入力)
B
S
O 〇
これをアウトカウントが3つになるまで行うプログラムです。

投稿日時 - 2012-07-13 22:36:39

QNo.7588996

すぐに回答ほしいです

質問者が選んだベストアンサー

ANo.1の補足読みました。

えーと、毎回出力するということは、最初の方にあるwhileループの中に出力も入ってないといけないということだと思うんですが、カッコの数を見る限り、

System.out.println("入力が違います。");
}
}

↑このカッコでwhileループが終わってませんか? そうすると、それより下はループから抜けた後に1度しか実行されませんけども。(笑)


あと、うまくいかない場合は「どういう風にうまくいかないのか?」を書かないと、普通は他の人はソースいちいち読んでくれませんよ。

投稿日時 - 2012-07-13 23:28:34

お礼

ご忠告と回答ありがとうございます。次からはそのようにしたいと思います。ありがとうございました。これを元に拡張していくつもりです。

投稿日時 - 2012-07-14 01:48:20

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

import java.io.*;
public class Q7588996 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
//String str=br.readLine();
//char hantei=str.charAt(0);
int sc=0,bc=0,oc=0;
while(oc<3){
String str=br.readLine();
char hantei=str.charAt(0);
if(hantei=='s') {
sc=sc+1;
if(sc==3) {
oc=oc+1;
sc=0;
bc=0;
}
}
else if(hantei=='b') {
bc=bc+1;
if(bc==4) {
sc=0;
bc=0;
}
}
else if(hantei=='o') {
oc=oc+1;
sc=0;
bc=0;
}
else {
System.out.println("入力が違います。");
}
System.out.print("B ");
for(int i=0;i<bc;i++){
System.out.print("〇");
}
System.out.println("");
System.out.print("S ");
for(int i=0;i<sc;i++){
System.out.print("〇");
}
System.out.println("");
System.out.print("O ");
for(int i=0;i<oc;i++){
System.out.print("〇");
}
System.out.println("");
}
}
}

投稿日時 - 2012-07-14 00:37:01

お礼

ありがとうございました。おかげで何とかになりそうです。

投稿日時 - 2012-07-14 01:49:31

ANo.1

全部は見てないけど、例えばこの部分。(見づらいので全角でインデントしてみました)

if(hantei=='s')
{
  c=sc+1;

  if(sc==3)
    oc=oc+1;
    sc=0;
    bc=0;
}

意味としては上のようにインデントしたように動かしたいのだと思うけども、そうすると {} が足りない。正しくは、

if(hantei=='s')
{
  sc=sc+1;

  if(sc==3)
  {
    oc=oc+1;
    sc=0;
    bc=0;
  }
}

だよね。他のところも同じように間違っていると思うので、全体的に見直しが必要です。

投稿日時 - 2012-07-13 22:46:02

補足

 回答ありがとうございます。いくつか直してみましたがやはり希望通りには行きません。一度入力したらそのたびにBSOが表示されるようにしたのですが・・・

投稿日時 - 2012-07-13 23:14:43

あなたにオススメの質問