回答0

时间:2013-10-27 22:12:10

标签: java double

Java初学者。我的结果一直变为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 个答案:

答案 0 :(得分:4)

您再次创建新对象,它应该是:

public static void main(String[] args) {
       golf stats = new golf();
       stats.getData();
       stats.display_data();
}

答案 1 :(得分:3)

错误1

与您的天气逻辑相关的代码块搞砸了;关闭括号是在错误的地方。

正确缩进,您的代码如下所示:

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

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

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

    }

 }

现在你可能已经看到了这个bug。如果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

主要方法中存在另一个错误。您应该在与display_data()相同的对象上调用getData() 。这可行:

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

其他问题&amp;风格问题

  • display_data不是惯用的Java方法名称。应该是displayData
  • 同样,Java类名称应以大写字母开头。 Golf,而不是golf。参见例如this guide on Java naming conventions
  • 使用double代表三个可能值之一(weather)是可疑的。使用int,或者更好的是enum。同样对于members,这是一个非常奇怪的类型选择。

答案 2 :(得分:1)

由于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) {
        // ...

您可以简单地使用一系列if或if-else链。我正在使用开关,因为在这种情况下它是最安全的选择。这假设您将weather更改为int,考虑到您对变量的使用,这实际上更可取。您还应该在声明期间(或在构造函数中,根据您的需要)明确初始化weather的值:

private int weather = 0;

正如其他答案所指出的那样,您的商家信息中存在次要错误:您应该只创建一个对象并同时调用它们,如下所示:

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

答案 3 :(得分:0)

您在一个实例(getData())上调用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();