有许多麻烦,在Java类

我正在学习如何使用的类和方法,但没有什么能打通我。 我读过的课本和大量网页的部分。 我用Java编写一个程序,它会从2测验,期中和期末成绩,并吐出所有的成绩,最终加权级和字母等级。 我试过很多次,但使用类不能这样做。 我可以编写一个程序,没有实现类的工作,但我真的想知道关于类。

这是我做到了无类:

import java.util.Scanner; public class grade { public static void main(String args[]) { //quiz method Scanner keyboard = new Scanner(System.in); System.out.printf("Please enter the grade of Quiz 1: "); double a = keyboard.nextInt(); System.out.printf("Please enter the grade of Quiz 2: "); double b = keyboard.nextInt(); double c = (a + b); double d = (c / 20); double quizGrade = (d * 25); //midterm method System.out.printf("Please enter the grade of the Midterm: "); double aa = keyboard.nextInt(); double bb = (aa / 100); double midtermGrade = (bb * 25); //final method System.out.printf("Please Enter the grade of the Final: "); double aaa = keyboard.nextInt(); double bbb = (aaa / 100); double finalGrade = (bbb * 50); double overallGrade = (quizGrade + midtermGrade + finalGrade); System.out.printf("Score for Quiz 1 is: %f\n", a); System.out.printf("Score for Quiz 2 is: %f\n", b); System.out.printf("Score for Midterm is: %f\n", aa); System.out.printf("Score for Final is: %f\n", aaa); //figuring letter grade if (overallGrade >= 90) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: A\n"); } if (overallGrade >= 80 && overallGrade <= 89) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: B\n"); } if (overallGrade >= 70 && overallGrade<= 79) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: C\n"); } if (overallGrade >= 60 && overallGrade<= 69) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: D\n"); } if (overallGrade < 60) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: F\n"); } } }

这是我带班尝试过...我认为这是肯定地说,我不知道我在做什么:

import java.util.Scanner; public class grade2 { Scanner keyboard = new Scanner(System.in); System.out.printf("Please enter the grade of Quiz 1: "); double grade1 = keyboard.nextInt(); System.out.printf("Please enter the grade of Quiz 2: "); double grade11 = keyboard.nextInt(); System.out.printf("Please enter the grade of the Midterm: "); double grade2 = keyboard.nextInt(); System.out.printf("Please enter the grade of the Final: "); double grade3 = keyboard.nextInt(); public static double quizgrade(double grade1, double grade11) { //quiz double a = grade1 double b = grade11 double c = (a + b); double d = (c / 20); double quizGrade = (d * 25); return quizGrade; } public static double midtermgrade(double grade2) { //midterm double aa = grade2 double bb = (aa / 100); double midtermGrade = (bb * 25); return midtermGrade; } public static double finalgrade(double grade3) { //final double aaa = grade3 double bbb = (aaa / 100); double finalGrade = (bbb * 50); return finalGrade; } double overallGrade = (quizgrade + midtermgrade + finalgrade); System.out.printf("Quiz 1 grade is: %f\n", grade1); System.out.printf("Quiz 2 grade is: %f\n", grade11); System.out.printf("Midterm grade is: %f\n", grade2); System.out.printf("Final grade is: %f\n", grade3); //figuring letter grade if (overallGrade >= 90) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: A\n"); } if (overallGrade >= 80 && overallGrade <= 89) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: B\n"); } if (overallGrade >= 70 && overallGrade<= 79) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: C\n"); } if (overallGrade >= 60 && overallGrade<= 69) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: D\n"); } if (overallGrade < 60) { System.out.printf("Your overall grade is: %f\n", overallGrade); System.out.printf("Your letter grade is: F\n"); } }

任何帮助吗? 这种材料被弄糊涂,没有终点!

--------------解决方案-------------

你的第一个目标应该是让你的代码来执行,所以你可以检查它,并获得正在发生的事情,那么你就可以了解后OOP的其他方面的理解。

在你的代码中第一个片断你缠的程序代码的类,因为它是静态main方法里面,当你运行你的程序就会执行。 然而,在你的第二次尝试,你没有创建类(对象)的任何地方的一个实例,所以怎么能什么执行呢? 没有主要方法,所以除非你正在创建grade2其他地方,那么你的代码永远不会执行的实例。

对于一个单独的类的实现你有你的grade2对象内部的静态main方法,创建了自己的一个实例(我建议用大写名称类名)是这样的:

public class Grade2 {

static void main(String[] args) {

Grade2 grade2 = new Grade2(); // Construct (instantiate) the object.

// Access methods etc. on the grade2 instance.
grade2.doStuff(args);
}

// Other methods etc.
}

因此,通过创建类的实例,就可以使用该实例(grade2)来调用方法和访问变量等。我不想(公共,私有,保护),但可以访问你超载。 但如果你能解决这个包裹你的头,那么你将开始获得关于面向对象的其他方面的牵引力。

祝你好运!

在当你指定一个方法或变量比静态OOP,它是类的成员。 如果它不是静态的它是一个类的实例中的一员。 也寻找到构造函数,创建类的新实例时调用的第一件事。

恩。

public class grade2{
static{
//this is a static block that is only called on the first time an instance of the class is ran
}
public grade2(){
//this is a constructor
}
}

好吧...我有时觉得这就像骑自行车......你不'有它',但一旦你做,你就会有它的生命。

你想解决使用一些类这个问题... ok了。

首先,闯入两件事情......一个程序(即从用户接受输入的东西)和模型(或域)这一点。

您的模型仅仅是一系列的类。 在非常简单的术语,让我们创建一个名为类

学生一类叫做考试

一个学生可能会对它私人字符串名称一些领域;

也许有些人,私人期中考试; 私人终考试; 私人考试测验;

创建这些字段的getter和setter

确定...我希望你还在我身边。 如果这似乎很容易,尽量实现你的考试权重为亚类的考试。

考试超(如果你选择去子类路线)有一个名为像getWeightedExamMark或者随便你怎么称呼它的方法。 它返回一个双并接受其签名的两倍。 通过子类考试成,比方说,决赛中,期中和测验,该方法可以重写应用规则是多么值得。

其实,你应该将学生类的三个考试对象和成的Reportcard类...那么你有getMark的报告卡(一个方法)相吻合从三个子类考试的getWeightedExamMark方法来呈现的最终成绩。

我会写代码,但算起来也更好,所以你学习语法和结构的自己沿着带领你。

祝你好运。

Firstl你需要确定你需要代表现实世界对象

在你的情况下,其等级,测试用户

测试可以类型 - 测验,期中考试,决赛

每个用户都将被授予等级为每种类型的测试

Class User {

List<Test> testList ;

public double getQuizGrade() { .. }
public double getMidTermGrade() { .. }
public double getFinalTermGrade() {..}
public String getOverAllGrade() { .. }

}

Class Test {
// define an enum of TestType( QUIZ , MIDTERM , FINALTERM)
Grade g ;

}

Class Grade {
double marks ;
}

现在,一旦你已经仿照这些类,你可以继续增加,这将捕获每个用户采取测试和调用相应的用户方法计算的档次和给你一个档次主要方法

我建议迁移这http://codereview.stackexchange.com/。

从根本上说类模型实例(也称为对象)。 一个类的所有实例可以使用此槽类公开的方法。 例:

class Color {
// instance variable
String name;

// constructor
Color(String nameOfColor) {
name = nameOfColor;
}
}

Color red = new Color("red");
Color green = new Color("green");

System.out.println(red.name) // prints "red"
System.out.println(green.name) // prints "green"

这就是上面所发生的事情:

  1. 我们声明的类颜色
  2. 我们实例化的类颜色的两个对象的名称红色和绿色
  3. 我们所使用的名称的方法打印的颜色的名称

你可以看到,我们用两种颜色相同的方法(名)却得到了不同的结果。 这是因为,每个实例的变量不同,但在模型(类)保持不变。

你没有使用的静态方法,它们不具有访问一个实例的变量(状态),但可在类(不需要实例)直接调用。 但静态方法编程并不是很面向对象,即不是基于类的编程。 其功能编程。

可以是这样的:

public class GradesReport{

//Here you store keyboard input
private double quizOneGrade;
private double quizTwoGrade;
private double midtermGrade;
private double finalGrade;

public printAllGrades(){
//Send all attributtes to standart output
}

public getOverallGrade(){
//Do your algorithm magic here
}

// Getters and setters here. If you want some formatting do that there

您实例化此类键盘输入从具有main方法的类。

只是笑声,我的重构。 没有真正完成,但设置为显示的一些想法,如:

  • 构造函数
  • 工厂方法
  • 静态方法和实例方法
  • 处理输入/输出更干净
  • toString()方法

玩的开心。

import java.io.InputStream;
import java.util.Scanner;

public class Grade2 {

/** In fractions of available points. */
final double quiz1Grade;

/** In fractions of available points. */
final double quiz2Grade;

/** In fractions of available points. */
final double midtermGrade;

/** In fractions of available points. */
final double finalGrade;

Grade2(double quiz1Grade, double quiz2Grade, double midtermGrade,
double finalGrade)
{
this.quiz1Grade = quiz1Grade;
this.quiz2Grade = quiz2Grade;
this.midtermGrade = midtermGrade;
this.finalGrade = finalGrade;
}

/** returns a final grade in percentage points. */
public double overallGrade()
{
// weighted sum out of 100
return ((quiz1Grade + quiz2Grade) * 25) +
(midtermGrade * 25) +
(finalGrade * 50);
}

private static String letterGrade(double overallGrade)
{
final String letter;
//figuring letter grade
if (overallGrade >= 90) {
letter= "A";
} else if (overallGrade >= 80 && overallGrade <= 89) {
letter= "B";
} else if (overallGrade >= 70 && overallGrade<= 79) {
letter= "C";
} else if (overallGrade >= 60 && overallGrade<= 69) {
letter= "D";
} else if (overallGrade < 60) {
letter= "F";
} else {
letter = "UNKNOWN "+overallGrade;
}
return letter;
}

public void reportGrade()
{
double overallGrade = overallGrade();
String letter = letterGrade(overallGrade);
System.out.printf("Your overall grade is: %f\n", overallGrade);
System.out.printf("Your letter grade is:" + letter + "\n");
}

@Override
public String toString()
{
return String.format("Score for Quiz 1 is: %f\n", quiz1Grade) +
String.format("Score for Quiz 2 is: %f\n", quiz2Grade) +
String.format("Score for Midterm is: %f\n", midtermGrade) +
String.format("Score for Final is: %f\n", finalGrade);
}

public static Grade2 readGradeFrom(final InputStream in)
{
Scanner keyboard = new Scanner(in);
System.out.printf("Please enter the grade of Quiz 1: ");
int quiz1 = keyboard.nextInt();
// in points out of 10

System.out.printf("Please enter the grade of Quiz 2: ");
int quiz2 = keyboard.nextInt();
// in points out of 10

//midterm method
System.out.printf("Please enter the grade of the Midterm: ");
int midterm = keyboard.nextInt();
// in points out of 25

//final method
System.out.printf("Please Enter the grade of the Final: ");
int finalTest = keyboard.nextInt();
// in points out of 100

return new Grade2( quiz1 / 10.0, quiz2/10.0, midterm / 25.0, finalTest / 100.0);
}

public static void main(String args[])
{
Grade2 grade = readGradeFrom(System.in);
grade.reportGrade();
}
}

分类:java的 时间:2013-04-17 人气:0
本文关键词: Java中,内部类
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.529 (s). 10 q(s)