我们一直在学习java中的方法(使用netbeans),我对使用方法仍然有点困惑。一个功课问题基本上要求使用方法设计一个等级计算器,方法是提示用户输入标记,最大标记,加权测试然后产生该测试的最终得分。 例如。 (35/50)* 75%=总分
然而,我正在努力使用方法,我想知道是否有人可以指出我正确的方向,为什么我的代码下面有一些错误,并没有运行?我不想要任何完整的答案,因为我想尝试自己做到最好,而不是抄袭。任何帮助将不胜感激 :)! (也许会很好,因为我是编程的新手,我不是很好) 谢谢!
import java.util.Scanner;
public class gradeCalc
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
scoreCalc();
System.out.print("Your score is" + scoreCalc());
}
public static double scoreCalc (int score1, int maxMark, double weighting, double finalScore)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter mark");
in.hasNextInt();
score1 = in.nextInt();
System.out.print("Enter Max mark");
in.hasNextInt();
maxMark = in.nextInt();
System.out.print("Enter weighting as a decimal (eg. 75% = 0.75)");
in.hasNextInt();
weighting = in.nextInt();
finalScore = (score1/maxMark)* weighting;
return finalScore;
}
}
答案 0 :(得分:2)
您正在调用方法scoreCalc()
而不传递您定义的参数。
当你调用它时,它被定义为有3个参数。
scoreCalc(7, 10, 3.0, 8.0);
此外,在创建类时,请使用大写GradeCalc
答案 1 :(得分:0)
要指出的一些错误/错误是: -
1)您在Scanner in = new Scanner(System.in);
中不需要此语句main()
,因为您没有通过该功能从用户那里获取输入。
2)您的函数scoreCalc (int score1, int maxMark, double weighting, double finalScore)
需要参数,例如其调用应该看起来像scoreCalc(15, 50, 1.5, 2.7)
,但您将其称为scoreCalc()
,而不是来自main()
的参数
编辑: - 您的程序中还有一个严重的缺陷,可能有用,但编码不好。我不会为它提供代码,并会将实现留给您。从main()
中的用户输入(使用scanner
),将结果分配给临时变量,然后将该变量作为参数传递给函数scoreCalc()
//pseudocode in main()
Scanner in = new Scanner(System.in);
int score= in.nextInt();
.
.
.
scoreCalc(score,...);
或者你可以在没有参数的情况下制作scoreCalc函数,并在其中输入用户输入(如present),最后只将结果返回main()
。
这两种方法似乎都合适,您可以自由选择:)
答案 2 :(得分:0)
正如您所看到的,scoreCalc
方法需要一组参数,但您可以在没有参数的情况下调用它。
第二种:Scanner in = new Scanner(System.in);
方法中不需要使用main(String[] args)
方法。您将其称为scoreCalc
方法。
第三:你打电话给scoreCalc
两次。第一个电话在System.out.println
之前,第二个电话在System.out.println
之前。您的应用程序将询问用户两次输入值。
将结果值存储在变量中并稍后显示:
double result = scoreCalc(.... required params .....);
System.out.println("Your score is: " + result);
答案 3 :(得分:0)
开始:
1)遵循编码惯例。 (班级名称应以大写字母开头)。
2)在您的情况下,Scanner in = new Scanner(System.in);
中您不需要main()
,因为您没有使用它。
3)你是在没有参数的情况下调用方法scoreCalc()
。然而,需要使用参数调用该方法。
4)方法,是一个模块。它作为代码块增加了可重用性。所以我建议在main()
方法中接受用户的值,然后将它们传递给方法进行计算。
答案 4 :(得分:0)
有些事情让人想起:
您执行scoreCalc()
两次。您可能希望执行一次并将结果保存在double
变量中,例如:double score = scoreCalc()
。
说到scoreCalc()
:您的定义需要4个参数,而您没有该参数作为该方法的输入。您应该从方法定义中删除它们,而是在方法体中添加score1
,maxMark
,weighting
和finalScore
变量声明。
在main函数中,声明并实例化一个不使用的Scanner
对象。
请注意混合int
和double
的算术。
答案 5 :(得分:0)
与其他答案相反,我将从另一件事开始。
您忘记了最重要的方法 - 那就是Constructor
。
您必须创建一个成绩计算器,因此您创建一个表示成绩计算器对象的类(类型)。使用Java约定,此类应命名为GradeCalculator
,不要使用Calc
之类的缩写,以使名称不含糊。
回到constructor
- 你还没有创建你的Calculator对象。可能不需要它,你可能无法实现你的目标,但这不是一个好习惯。
因此,也可以使用此方法 - 这样,您将创建实际的Calculator对象。
可以这样实现:
public static void main(String[] args)
{
GradeCalculator myCalculator = new GradeCalculator();
}
现在你可以想象你的计算器摆在你面前。你可以用它吗? 获得一个标记将是一个良好的开端 - 所以,你可以做的是:
myCalculator.getMark()
现在你必须定义一个方法getMark()
:
private void getMark() { }
您将在其中提示用户输入。 你也可以这样做:
myCalculator.getMaxMark() { }
然后获得最大标记(在定义方法之后)。
您可以调用方法myCalculator.getWeighting()
,myCalculator.calculateFinalResult()
,myCalculator.printResult()
。
这样你就可以拥有以下mehtods(它可以做的事情)的实际对象:
public GradeCalculator() { } //constructor
private void getMark() { } //prompts user for mark
private void getMaxMark() { } //prompts user for max mark
private void getWeighting() { } //prompts user for weighting factor
private void calculateFinalResult() // calculates the final result
private void printResult() // prints the result.
我打算用方法创建一个计算器 - 我会高度评价。 尝试将您正在创建的类视为真实对象,并创建表示对象实际行为的方法。你越早开始这样做对你越好。 在一种方法中编写整个代码并不是一种好的做法,在较大的应用程序中可能会导致各种问题。因此,即使在进行小型项目时,也要尝试使用最佳实践来实现它们,这样就不会产生糟糕的习惯。
修改强> 这样你的整个程序就会像这样:
import java.util.Scanner;
public class GradeCalculator
{
//here you define instance fields. Those will be visible in all of your classes methods.
private Scanner userInput; //this is the userInput the calculator keypad if you will.
private int mark; //this is the mark the user will enter.
private int maxMark; //this is the mark the user will enter.
private int weightingFactor; //this is the weighting factor the user will enter.
private int result; //this is the result that will be calculated.
public static void main(final String args[])
{
Scanner userInput = new Scanner(System.in); //create the input(keypad).
GradeCalculator calculator = new GradeCalculator(userInput); //create the calculator providing it with an input(keypad)
calculator.getMark();
calculator.getMaxMark();
calculator.getWeightingFactor();
calculator.printResult();
}
private GradeCalculator(final Scanner userInput)
{
this.userInput = userInput; //from now the provided userInput will be this calculators userInput. 'this' means that it's this specific calculators field (defined above). Some other calculator may have some other input.
}
private void getMark() { } //here some work for you to do.
private void getMaxMark() { } //here some work for you to do.
private void getWeightingFactor() { } //here some work for you to do.
private void printResult() { } //here some work for you to do.
}
请注意,在构建Calculator对象后,您不必使用static的方法。