2

Java完全初心者です。私の結果は、membercount * メンバーとして表示したいところを 0 として表示し続けます (つまり、100 人のメンバーがいて天気 = 1 の場合、合計は 25 になるはずです)。私はどこが間違っているのか理解できないようです。ユーザーが入力した情報をプログラムに適切に保存していないため、ダブルスは0として読み続けていると思います。これが私のコードです:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package playgolf;
import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 * @author Alex
 */
public class PlayGolf {
    public static void main(String[] args) {
        golf stats = new golf();
        stats.getData();
        golf total = new golf();
        total.display_data();
    }
}

class golf {
    private double members;
    private double weather;
    private double temp;
    private double membercount;
    public double total;

    public void getData() {
        Scanner input = new Scanner(System.in);
        System.out.print("How many members are there?: ");
        members = input.nextInt();
        System.out.print("What is the weather like? (Enter 1 for sunny, 2 for overcast, 3 for rain): ");
        weather = input.nextInt();
        System.out.print("What is the temperature? (in Farenheight): ");
        temp = input.nextInt();

        if (weather == 1) {
            membercount = .25;
            if (weather == 2) {
                membercount = .12;
                if (weather == 3) {
                    membercount = .03;
                }
            }
        }
        if (temp < 32) {
            membercount = 0;
            System.out.println("No one will play today, it's too darn cold!");
        }
        total = (membercount * members);
    }

    public void display_data() {
        System.out.println(" ");
        System.out.println("This many members will play today: ");
        System.out.println(total);
    }
}
4

4 に答える 4

4

新しいオブジェクトを再度作成すると、次のようになります。

public static void main(String[] args) {
       golf stats = new golf();
       stats.getData();
       stats.display_data();
}
于 2013-10-27T22:15:15.893 に答える
3

バグ 1

天気ロジックに関連するコード ブロックがめちゃくちゃです。右中括弧が間違った場所にあります。

適切にインデントすると、コードは次のようになります。

if (weather == 1) {
    membercount = .25;

    if (weather == 2) {
        membercount = .12;

        if (weather == 3) {
            membercount = .03;
        }

    }

 }

これで、おそらくすでにバグを確認できます。weatherが 2 の場合、weather == 2条件に到達することはありません (weather同時に 1 と 2 になることはできません)。

修正版:

 if (weather == 1) {
     membercount = .25;
 } 
 else if (weather == 2) {
     membercount = .12;
 }
 else if (weather == 3) {
     membercount = .03;
 }

バグ 2

もう 1 つのバグは main メソッドにあります。display_data() と同じオブジェクトを呼び出す必要がありますgetData()。これはうまくいきます:

golf stats = new golf();
stats.getData();
stats.display_data();

その他の問題 & スタイルの問題

  • display_data慣用的な Java メソッド名ではありません。する必要がありますdisplayData
  • 同様に、Java クラス名は大文字で始める必要があります。Golfではありませんgolf。たとえば、Java 命名規則に関するこのガイドを参照してください。
  • double3 つの可能な値 ( ) のいずれかを表すために使用するのは疑わしいweatherです。を使用するintか、さらに良いことに、enum. またmembers、かなり奇妙なタイプの選択です。
于 2013-10-27T22:22:27.820 に答える
1

if条件がネストされているため、 if は とweather != 1をチェックしweather == 2weather == 3到達することはありません。

結果として、membercountは設定されず、ゼロの値を取り、 の結果はゼロになりますtotal

次のようなものが必要です。

        switch (weather) {
        case 1:
            membercount = .25;
            break;
        case 2:
            membercount = .12;
            break;
        case 3:
            membercount = .03;
            break;
        default:
            // Do nothing or, better yet, produce an error
        }

        if (temp < 32) {
        // ...

単純に一連のifs または if-else チェーンを使用できます。この場合、最も安全な選択であるため、スイッチを使用しています。weatherこれは、 に変更することを前提としています。これintは、変数の使用を考えると、実際には望ましいことです。weatherまた、宣言中に (またはコンストラクターで)の値を明示的に初期化する必要があります。

private int weather = 0;

他の回答で指摘されているように、リストに二次的なバグがあります。次のように、オブジェクトを 1 つだけ作成し、それに対して両方の呼び出しを行う必要があります。

   golf stats = new golf();
   stats.getData();
   stats.display_data();
于 2013-10-27T22:19:09.290 に答える
0

getData()1 つのインスタンス (のgolf) を呼び出しdisplay_data()、別のインスタンスを呼び出しています。はstatsデータを収集しますが、は収集totalしません。インスタンスで呼び出したり、インスタンスでdisplay_data()呼び出したり、共有メンバーを使用したりしてください( s つまり)。statsgetData()totalstatic

golf stats = new golf();
stats.getData();
stats.display_data();

また

golf total = new golf();
total.getData();
total.display_data();
于 2013-10-27T22:21:48.143 に答える