2010-12-01 13 views
0

私はプログラミングに慣れていないので、私を素晴らしい初心者とみなしてください。 ジレンマ: 「はい」と応答するたびにコードを繰り返したいと思います。 ステートメントが最初に来て、ブール条件を最後に評価する必要があるので、 "do while loop"を使用します。JavaSEのdo whileループに関する問題

コード:

import java.util.Scanner; 

class whysoserious { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 

     do{ 
     String go = YES; 

     int setone = 0; 
     int settwo = 0; 

     System.out.println("Enter two numbers: "); 

     setone = sc.nextInt(); 
     settwo = sc.nextInt(); 
     int set = setone + settwo; 


     System.out.println("What is " +setone+ " + " +settwo+ " ? "); 
     int putone = 0; 
     putone = sc.nextInt(); 

     if (putone == set) 
      System.out.println("Correct!"); 

     else 
      System.out.println("Wrong Answer - The correct answer is: "+set+""); 

     System.out.println("Continue?"); 
     cont = sc.nextLine(); 
     } while (cont == go); 
    } 
} 

Iは、CMDプロンプトの行を追加するように頼まれました。

  • C:\テスト> javacのwhysoserious.java whysoserious.java:15: シンボルシンボルを見つけることができません:変数YES 場所:クラス 文字列が行くwhysoserious = YES; ^ whysoserious.java:38:見つからない シンボルシンボル:変数cont 場所:クラスwhysoserious cont = sc.nextLine(); ^ whysoserious.java:39:見つからない シンボルシンボル:変数cont 場所:クラスwhysoserious } while(cont == go); ^ whysoserious.java:39:見つからない シンボルシンボル:変数go 場所:クラスwhysoserious } while(cont == go); ^ 4エラー

コンパイルしようとするたびに常にエラーが発生します。この背後にある知識は、ユーザーが「はい」または「いいえ」と入力して続行するたびにコードを繰り返すことです。コードがdo {なしで動作することを確認してください。この時点で、私はしばらくしている。

+0

間違いを教えてください。エラーは画面を乱雑にするだけでなく、トラブルシューティングのためのものです。 :) – Teekin

+2

フォーマットを修正してください。 –

+1

あなたのコードはこれでうまく動作しますが、Javaスタイルのガイドラインでは、クラスは大文字で始まり、クラス、変数、メソッドはすべてキャラルケースにする必要があります。だからあなたのクラスは "WhySoSerious"という名前にする必要があります。 – Jonathan

答えて

7

複数の問題:

  • あなたは、ループ内goを宣言contYESがそうコンパイラは、彼らが

  • 何であるかを知らない宣言したことがないwhile内のスコープのそのうちので、式

  • 文字列と==を比較すると、ここで必要なことはできません - あなたは2つのdiffe同じ内容のレンタル文字列。代わりにequalsを使用してください。

コンパイラからのエラーメッセージは、最初の2つについて説明する必要があります - コンパイラが何を言っているかに注意してください。

最も簡単な修正:しかし、doString cont;を追加goを取り除くと、ユーザが「はい」または「Y」または「YES」または他のいくつかのバリエーションを入力した場合、この意志はまだ終了テストwhile ("YES".equals(cont));を作ります。

+0

もう2つあります:@Racketあなたは3つの閉じ括弧を2つではなくもう1つはすでに@Ronnieの答えにしています。 –

3

ライン:

String go = YES; 

は、次のようになります。

String go = "YES"; 

をそれ以外の場合、コンパイラはYES、それが知っている、とフリークアウトに進んでいないことをいくつかの変数であることだと思います。

1

@Ronnieハウエルが述べ何...文字列の平等のためのequals()方法を使用することを追加します。あなたがcontを定義したところ

while (cont == go); 

読んでください...

while (cont.equals(go)); 

PS ...私は表示されません。 doループ外に宣言してください。

0

次作品:

import java.util.Scanner; 

public class WhySoSerious { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     String cont; 
     String go = "YES"; 

     do { 

      System.out.println("Enter two numbers: "); 

      int setone = sc.nextInt(); 
      int settwo = sc.nextInt(); 
      int set = setone + settwo; 


      System.out.println("What is " + setone + " + " + settwo + " ? "); 
      int putone = sc.nextInt(); 

      if (putone == set) 
       System.out.println("Correct!"); 
      else 
       System.out.println("Wrong Answer - The correct answer is: " + set + ""); 
      System.out.println("Continue?"); 
      cont = sc.next(); 
     } while (cont.equalsIgnoreCase(go)); 
    } 
} 
+0

ありがとうございます。私はしかし、質問があります。 sc.next()の代わりにsc.nextLine()を置くと、なぜうまくいかないのですか?違いは何ですか? – Racket

+0

パブリック文字列の次の(): 発見し、このスキャナから次の完全なトークンを返します。 ------------------------------------------------ -------------------- パブリックストリングnextLine():現在行過去 進歩このスキャナとスキップされた入力を返します。このメソッドは、最後の行区切り文字を除いて、現在の行の残りの部分を返します。位置は次の行の先頭に設定されます。 –