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);
}
}
答案 0 :(得分:4)
您再次创建新对象,它应该是:
public static void main(String[] args) {
golf stats = new golf();
stats.getData();
stats.display_data();
}
答案 1 :(得分:3)
与您的天气逻辑相关的代码块搞砸了;关闭括号是在错误的地方。
正确缩进,您的代码如下所示:
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;
}
主要方法中存在另一个错误。您应该在与display_data()
相同的对象上调用getData()
。这可行:
golf stats = new golf();
stats.getData();
stats.display_data();
display_data
不是惯用的Java方法名称。应该是displayData
。Golf
,而不是golf
。参见例如this guide on Java naming conventions。double
代表三个可能值之一(weather
)是可疑的。使用int
,或者更好的是enum
。同样对于members
,这是一个非常奇怪的类型选择。答案 2 :(得分:1)
由于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) {
// ...
您可以简单地使用一系列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();