2014-09-01 3 views
-1

Мы изучали методы в java (используя netbeans) в классе, и я все еще немного запутался в использовании методов. Один вопрос о домашнем задании в основном просит разработать калькулятор класса с использованием методов, запросив у пользователя знак, максимальный знак, весовой этого теста, а затем произвести окончательный результат для этого теста. например. (35/50) * 75% = общая отметкаМетоды в java (калькулятор классов)

Однако я изо всех сил пытаюсь использовать методы, и мне было интересно, может ли кто-нибудь указать мне в правильном направлении, почему мой код ниже имеет некоторые ошибки и не запускается ? Мне не нужны полные ответы, потому что я хотел бы попробовать и сделать это лучше всего, а не плагиата. Любая помощь будет принята с благодарностью :)! (Также PLS быть хорошим, потому что я новичок в программировании, и я не очень хорошо) Спасибо!

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

Некоторые ошибки/ошибки в укажут являются: -

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(), то есть без paramters от main().

Редактировать: - В вашей программе есть еще один серьезный недостаток, который может работать, но не является хорошим кодированием. Я не буду предоставлять код для него и оставит вам реализацию. Возьмите вход от пользователя в main() (с помощью scanner), присвоить результат переменной темп там, а затем передать эту переменную в качестве параметра функции scoreCalc()

//pseudocode in main() 
Scanner in = new Scanner(System.in); 
int score= in.nextInt(); 
. 
. 
. 
scoreCalc(score,...); 

Или вы можете сделать свою функцию scoreCalc без параметров, и введите в него пользовательский ввод (например, настоящий) и, наконец, верните результат только main().

Оба подхода представляется целесообразным, и вы можете выбрать :)

0

Как вы можете видеть scoreCalc метод необходим набор параметров, но можно вызвать без параметров.

Второе: в вашем main(String[] args) не требуется Scanner in = new Scanner(System.in);. Вы вызываете его в метод scoreCalc.

В-третьих: вы вызываете scoreCalc дважды. Первый звонок до System.out.println, второй - System.out.println. И ваше приложение дважды попросит пользователя ввести значения.

магазин значение результата в переменной и показать его позже:

double result = scoreCalc(.... required params .....); 
System.out.println("Your score is: " + result); 
+0

Я знаю, что, вероятно, звучит глупо, но когда я определяю свои параметры, как мне определить его так, что они равны, вводимый пользователь? – lildizzle63

+0

Если вы получаете значения от пользователя с помощью ввода с клавиатуры, нет необходимости определять параметр с тем же семантическим значением. Например, вы передаете метод maxMark в этот метод, и вы получаете его значение от ввода пользователя. Это не имеет смысла. Передавайте в качестве параметров только информацию, которая требуется в ваш метод, но не существует в нем. – 2014-09-01 11:38:57

2

Вы вызова метода scoreCalc() без прохождения параметров, которые вы определили. Когда вы вызываете его, он определяется как имеющий 3 параметра.

scoreCalc(7, 10, 3.0, 8.0); 

Кроме того, при создании класса, начните его с заглавной, GradeCalc

0

Для начала:

1) Выполните соглашения кодирования. (Название класса должно начинаться с прописной буквы).

2) В вашем контексте вам не нужен Scanner in = new Scanner(System.in); в main(), потому что вы его не используете.

3) Вы вызываете метод scoreCalc() без параметров. Принимая во внимание, что метод нужно вызывать с параметрами.

4) Способ, является модулем. Это как блок кода, который увеличивает повторное использование. Поэтому я предлагаю принять значения от пользователя в методе main(), а затем передать их методу вычисления.

0

Пару вещей на ум:

  1. Вы выполнить scoreCalc() дважды. Возможно, вы хотите выполнить его один раз и сохранить результат в переменной double, например: double score = scoreCalc().

  2. Разговор о scoreCalc(): В вашем определении используются 4 параметра, которые у вас нет в качестве входных данных для этого метода. Вы должны удалить их из определения вашего метода и вместо этого добавить score1, maxMark, weighting и finalScore объявления переменных в тело метода.

  3. В вашей основной функции вы объявляете и создаете объект Scanner, который вы не используете.

  4. Будьте осторожны с арифметикой, которая смешивает int и double.

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. 

И что я бы назвал создание калькулятора, используя методы, - и я бы высокообогащенного. Попробуйте подумать о классах, которые вы создаете как реальные объекты, и создать методы, представляющие поведение, которое действительно имеет объекты. Чем скорее вы начнете это делать, тем лучше для вас. Написание всего кода одним методом не является хорошей практикой, а в больших приложениях может привести к различным проблемам. Поэтому даже при небольших проектах старайтесь делать их с использованием лучших практик, чтобы у вас не развивались плохие habbits.

Edit: Так что вся ваша программа может выглядеть следующим образом:

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. 
} 

Пожалуйста, обратите внимание на то, что после построения объекта калькулятора вы не должны использовать методы, которые static.

Смежные вопросы