2014-12-15 3 views
1

Существует три программы для запуска различной функции, и мне говорят, чтобы они вызывали их в зависимости от нумерованной опции ввода пользователя. Сначала я включил свои программы, прежде чем добавлять в конец инструкции switch. Я получаю ошибки, меняющиеся в инструкции switch - что именно мне нужно вставить в эти браки для каждого случая? Параметры?Вызов классов в инструкции switch?

Я получаю ошибки, включая ожидаемый класс ошибок.

import java.util.Scanner; 
import java.lang.Math; 

public class HelperMethod{ 
    public static boolean BookNumber(String a) { 
     char f; 
     int e, g, h; 
     int result = 0; 

     System.out.println ("Please enter a thirteen digit number"); 
     String a = scanner.nextLine(); 

     if (a.length() == 13){ 
      for (int i = 0; i < 13; i ++) { 
       f = a.charAt(i); 
       e = Character.digit(f, 10); 
       if (i % 2 == 0) { 
        g = e * 1; 
        result = result + g; 
       } else { 
        g = e * 3; 
        result = result + g; 
       } 
      } 
      System.out.println ("The added sum of you numbers is " + result); 
      if (result % 10 == 0) { 
       System.out.println ("This combination IS a ISBN number"); 
      } else { 
       System.out.println ("This is NOT an ISBN number"); 
      } 
     } else { 
      System.out.println ("This combination is not thirteen digits long"); 
     } 
    } 

    public static boolean NewtonsMethod (double guess) { 
     double guess, fX, fPrimeX, newGuess; 

     System.out.println ("enter in a value give"); 
     guess = userInputScanner.nextDouble(); 
     System.out.println ("Your guess is " + guess); 
     double guess; 

     while (true) { 
      fX = (6 * Math.pow (guess,4)) - (13 * Math.pow (guess,3)) - (18 * Math.pow (guess,2)) + (7 * guess) + 6; 
      fPrimeX = (24 * Math.pow (guess,3)) - (39 * Math.pow (guess,2)) - 36 * guess + 7; 
      newGuess = guess - (fX/fPrimeX); 
      System.out.println ("A possible root is " + newGuess); 
      if (Math.abs(newGuess - guess) < 0.00001) { 
       break; 
      } else { 
       guess = newGuess; 
      } 
     } 
     System.out.println ("The root is: " + newGuess); 
    } 

    public static void QuadraticFormula (double a, double b, double c) { 
     Scanner keyboard = new Scanner(System.in); 

     // Input 
     System.out.println("Please enter an a value:"); 
     double a = keyboard.nextDouble(); 
     System.out.println("Please enter a b value:"); 
     double b = keyboard.nextDouble(); 
     System.out.println("Please enter a c value:"); 
     double c = keyboard.nextDouble(); 

     // Calculations 
     double discriminant = b * b - 4 * a * c; 
     double rootOne = 0, rootTwo = 0; 

     // Option A 
     if (discriminant < 0) { 
      System.out.println("There are no roots!"); 
     } else if (discriminant > 0){ 
      rootOne = (-b + Math.sqrt(discriminant))/(2 * a); 
      rootTwo = (-b - Math.sqrt(discriminant))/(2 * a); 
      System.out.println("Your roots are: " + rootOne + " and " + rootTwo); 
     } else { 
      rootOne = (-b + Math.sqrt(discriminant))/(2 * a); 
      System.out.println("Your unique root is: " + rootOne); 
     } 

     // Option B 
     if (discriminant < 0) { 
      System.out.println("There are no roots!"); 
     } else { 
      rootOne = (-b + Math.sqrt(discriminant))/(2 * a); 
      rootTwo = (-b - Math.sqrt(discriminant))/(2 * a); 
      if (discriminant > 0) { 
       System.out.println("Your roots are: " + rootOne + " and " + rootTwo); 
      } else { 
       System.out.println("Your unique root is: " + rootOne); 
      } 
     } 
    } 

    public static void main (String[] args) { 
     Scanner userInputScanner = new Scanner (System.in); 

     System.out.println ("You have three options. press one for the quadratic Formula, 2 for the newtons Method, and 3 for an ISBN checker."); 
     int input = userInputScanner.nextInt(); 

     switch (input) { 
      case 1: 
       NewtonsMethod (double guess); 
       break; 
      case 2: 
       BookNumber(String a); 
       break; 
      case 3: 
       QuadraticFormula (double a, double b, double c); 
       break; 
     } 
    } 
} 
+1

Остерегайтесь - после копирования этого кода в мою IDE было отмечено 28 ошибок. – rgettman

+0

Ваш код очень смущен. Вы передаете значения методам, но также имея эти методы для чтения значений из ввода, и вы включаете имя типа в параметр при вызове метода. –

+2

похоже, что вам нужно читать Java немного больше ... прежде чем задавать вопросы здесь. В то время как что-то вроде: NewtonsMethod (двойное предположение); называется сигнатурой метода, NewtonsMethod (догадка); называется вызовом метода. то, что вам нужно в инструкции switch, является вызовом метода NOT подписи метода. вам нужно вызывать уже определенный/реализованный метод, хотя :) – LeTex

ответ

0

Да, у вас есть несколько синтаксических ошибок здесь:

NewtonsMethod(double guess); 

Вы пытаетесь вызвать метод, но это выглядит как декларация. У вас есть правильные вызовы методов в другом месте, например, например: Math.sqrt(discriminant). Так что это должно выглядеть так:

NewtonsMethods(guess); 

Однако эти методы не выглядят так, будто они вообще должны принимать аргументы.

public static boolean NewtonsMethod (double guess) { 
    double guess, fX, fPrimeX, newGuess; 
    System.out.println ("enter in a value give"); 
    guess = userInputScanner.nextDouble(); 
    ... 

У вас нет ничего, чтобы пройти в них, когда вы вызываете их, и вы собираете пользовательский ввод для этих переменных в теле метода. Это приводит к тому, что локальные переменные объявленного метода сталкиваются с этими аргументами, вызывая больше синтаксических ошибок. Таким образом, просто не передать какие-либо аргументы в них, и ваши заявления выглядеть примерно так:

public static boolean NewtonsMethod (double guess) { 

Ваши возвращаемые типы являются проблематичными также. Вы объявляете свои методы с помощью типа boolean return, но никогда не возвращаете значение. Не похоже, чтобы быть много нужно для возвращения булево здесь, так что я бы просто дать им недействительным тип возвращаемого:

public static void NewtonsMethod (double guess) { 

После этого, я вижу только три других синтаксических ошибок. У вас есть два места, где вы пытаетесь использовать Scanner, который вы еще не инициализировали. Вы инициализируете их в QuadraticFormula и main, хотя, так что следуйте этому шаблону. Кроме того, вы дважды указали переменную guess в методе Ньютона. Исправьте это. Полагаю, это, по крайней мере, скомпилировано. Я оставляю логические ошибки для вас в основном, кроме этого, который просто прыгает прямо у меня: цифры, которые вы говорите, чтобы пользователь нажимал, не делают того, что вы говорите, они делают.

+0

Спасибо за помощь, я сделал большинство изменений, которые вы предложили. Тем не менее, я до сих пор не понимаю, что вводить параметры каждого оператора метода для каждой трех программ. Например, мой учитель говорит, что квадратичная формула имеет 3 удвоения (что было бы правильно, а, b и с?). Поэтому, когда я вызываю три метода в этом операторе switch в конце кода, добавляю ли я: QuadraticFormula (a, b, c); ? – Virgo

+0

Ничего! Я получил его - Спасибо всем за конструктивную критику. – Virgo

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