2

Java 初学者。我的结果一直显示为 0,而我希望它显示为 membercount * members(即,如果有 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

另一个错误在 main 方法中。您应该调用与相同display_data() 的对象getData()。这会起作用:

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

其他问题和风格问题

  • display_data不是惯用的 Java 方法名称。应该是displayData
  • 同样,Java 类名应该以大写字母开头。Golf,不是golf。例如,请参阅有关 Java 命名约定的本指南
  • double用它来表示三个可能值之一是可疑的 ( weather)。使用int,或者更好的是,一个enum. 也因为members它是一个非常奇怪的类型选择。
于 2013-10-27T22:22:27.820 回答
1

由于您的if条件是嵌套的,因此 if永远不会weather != 1检查weather == 2和。weather == 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 链。我正在使用开关,因为在这种情况下它是最安全的选择。这假设您更改weatherint,考虑到您对变量的使用,这实际上是更可取的。weather您还应该在声明期间(或在您认为合适的构造函数中)显式初始化 的值:

private int weather = 0;

正如其他答案所指出的,您的列表中有一个次要错误:您应该只创建一个对象并对其进行两次调用,如下所示:

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

您正在调用getData()一个实例 (of golf) 并调用display_data()另一个实例。收集stats数据,但total不收集。尝试调用display_data()实例stats/或调用实例/或getData()使用total共享成员(static我的意思是)。

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

或者

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