Перегруженные методы Java - PullRequest
0 голосов
/ 30 марта 2009

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

MyMathOpsTest класс:

import java.util.Scanner; // import Scanner class
public class MyMathOpsTest
{
   //method to pause until a key is pressed
   public static void pause() 
   { 
       try 
   { 
       System.out.print("Press <Enter> to continue..."); 
       System.in.read(); 
   } 
       catch (Exception e)
       {
           System.err.printf("Error %s%c\n",e.getMessage(),7);
       }
}//end pause

public static void main( String args[] )
{
    //variables to capture keyboard input
    Scanner keyBd = new Scanner( System.in );
    char selection;
    //int selection;

    do{//display menu
        System.out.println( "1. Square a Number");
        System.out.println( "2. Cube a Number");
        System.out.println( "3. Raise a Number to a Power");
        System.out.println( "4. Maximum of Three Numbers");
        System.out.println( "5. Minimum of Three Numbers");
        System.out.println( "6. Exit");
        System.out.print( "Selection[1-6]: " );

        //get menu selection
        selection = keyBd.next().charAt(0);
        //selection = keyBd.nextInt();

        //process menu selection
        switch (selection){
            case '1':
                MyMathOpsTest.squareTheNumber();
                pause();
                break;
            case '2':
                MyMathOpsTest.cubeTheNumber();
                pause();
                break;
            case '3':                
                MyMathOpsTest.raiseTheNumber();
                pause();
                break;
            case '4':                
                MyMathOpsTest.maximumNumber();
                pause();
                break;
            case '5':                
                MyMathOpsTest.minimumNumber();
                pause();
                break;
                case '6':
                //recognize as valid selection but do nothing
                break;
            default :
                System.out.printf("%c\n",7);
                System.out.println("Invalid Selection");
        }//end switch

    }while( selection != '6');
} // end method main

public static void squareTheNumber()
{

}

public static void cubeTheNumber()
{
}

public static void raiseTheNumber()
{
}

public static void maximumNumber()
{
MyMathOps.maximum();
}

public static void minimumNumber()
{
}

} // end class MyMathOpsTest

Класс MyMathOps:

import java.util.Scanner;

public class MyMathOps
{
public static int square(x:Integer):Integer
{
}

public static double square(x:Double):Double
{
}

public static int cube(x:Integer):Integer
{
}

public static double cube(x:Double):Double
{
}

public static int maximum(x:Integer, y:Integer, z:Integer):Integer
{
    // create Scanner for input from command window
    Scanner input = new Scanner( System.in );
    // obtain user input
    System.out.print( "Enter three integer values separated by spaces: ");
    int numberl = input.nextInt();
    // read first integer
    int number2 = input.nextInt();
    // read second double
    int number3 = input.nextInt();
    // read third double
    // determine the maximum value
    int result = maximum( numberl, number2, number3 );
    // display maximum value
    System.out.println( "Maximum is: " + result );
} // end method maximum

public static double maximum(x:Double, y:Double, z:Double):Double
{
    // create Scanner for input from command window
    Scanner input = new Scanner( System.in );
    // obtain user input
    System.out.print( "Enter three floating-point values separated by spaces: ");
    number1 = input.nextDouble();
    // read first double double
    number2 = input.nextDouble();
    // read second double
    double number3 = input.nextDouble();
    // read third double
    // determine the maximum value
    double result = maximum( numberl, number2, number3 );
    // display maximum value
    System.out.println( "Maximum is: " + result );
} // end method maximum

public static int minimum(x:Integer, y:Integer, z:Integer):Integer
{
    // create Scanner for input from command window
    Scanner input = new Scanner( System.in );
    // obtain user input
    System.out.print( "Enter three integer values separated by spaces: ");
    int numberl = input.nextInt();
    // read first integer
    int number2 = input.nextInt();
    // read second double
    int number3 = input.nextInt();
    // read third double
    // determine the minimum value
    int result = minimum( numberl, number2, number3 );
    // display minimum value
    System.out.println( "Minimum is: " + result );
} // end method minimum

public static double minimum(x:Double, y:Double, z:Double):Double
{
    // create Scanner for input from command window
    Scanner input = new Scanner( System.in );
    // obtain user input
    System.out.print( "Enter three floating-point values separated by spaces: ");
    number1 = input.nextDouble();
    // read first double double
    number2 = input.nextDouble();
    // read second double
    double number3 = input.nextDouble();
    // read third double
    // determine the minimum value
    double result = minimum( numberl, number2, number3 );
    // display minimum value
    System.out.println( "Minimum is: " + result );
} // end method minimum

} // end class MyMathOps

Этот код представляет собой комбинацию кода, который я сам набираю, и пример кода из моего учебника. Это не скомпилирует для меня в jGRASP. Я получаю эти ошибки.

MyMathOps.java:10: <identifier> expected
   public static int square(x:Integer):Integer
                              ^
MyMathOps.java:96: ')' expected
    } // end method minimum
     ^
2 errors

----jGRASP wedge: exit code for process is 1.
----jGRASP: operation complete.

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

В том маловероятном случае, когда мой преподаватель или какой-либо администратор из Общественного колледжа Солт-Лейк-Сити когда-либо сталкивался с этим вопросом, позвольте мне ясно изложить свои намерения. Этот вопрос размещен в величайшем духе академической честности. Я задаю этот вопрос, чтобы обратиться за общими советами и помощью в понимании правильного использования языка программирования Java. Я никоим образом не использую работу других и представляю ее как свою собственную работу. Я использую ответы, представленные здесь, в качестве общей помощи в моем понимании. Я делаю всю свою работу и не копирую работы, предоставленные людьми, отвечающими на мой вопрос.

Ответы [ 4 ]

7 голосов
/ 30 марта 2009

Подобные строки не являются допустимым синтаксисом Java:

public static int square(x:Integer):Integer
public static int maximum(x:Integer, y:Integer, z:Integer):Integer
...

Это похоже на синтаксис UML или псевдокода. «x: Integer» - это «независимая от языка» нотация, означающая, что x - это тип Integer (который отображается на объект int или Integer в Java) «: Integer» в конце означает, что метод возвращает тип Integer, который вы уже делаете правильно.

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

public static int square(int x) // Or "Integer x" if you want to use the Integer class, rather than the primitive int
public static int maximum(int x, int y, int z)
....
2 голосов
/ 30 марта 2009

Я предполагаю, что вы привыкли к Паскалю (или производному).

public static int square (x: Integer): Integer

на Java, то есть

public static int square (int x)

Кроме того, поскольку код находится внутри «MyMathOpsTest», вам не нужно добавлять префиксы вызовов метода к «MyMathOpsTest».

Кроме того, зачем называть это «MyMathOps» вместо «MathOperationsTest»? Конечно, это ваше - это не долго для меня или кого-либо еще! Выбирайте имена, которые имеют значение, старайтесь избегать сокращений, таких как «Ops», если только это не является общим для поля, в котором вы работаете (URL хороший, а «Ops» нет).

А теперь общие советы по программированию для начинающих:

  • написать одну строку кода
  • получить эту строку кода для компиляции
  • после компиляции этой строки кода на следующей
  • получить следующую строку кода для компиляции
  • продолжайте делать это, пока программа не будет завершена.

Нет смысла повторять одни и те же ошибки снова и снова - все, что вы умеете делать, - это делать ошибки, и это не очень весело.

Итак, чтобы вы начали ...

Шаг 1:

public class MathOperations
{
    public static int maximum(final int x, final int y, final int z)
    {
    }
}

(скомпилируйте приведенный выше код)

Шаг 2:

public class MathOperations
{
    public static int maximum(final int x, final int y, final int z)
    {
        final Scanner input;
    }
}

(скомпилируйте приведенный выше код)

Шаг 3:

public class MathOperations
{
    public static int maximum(final int x, final int y, final int z)
    {
        final Scanner input;

        intput = new Scanner(System.in);
    }
}

(скомпилируйте приведенный выше код)

и затем продолжайте идти по одной строке за раз. Как только вы это освоите, вы можете сделать больше, чем одну строку, но в начале, если вы сделаете это по одной строке, вы сразу увидите, когда вы допустили ошибку. Убедитесь, что вы исправили ВСЕ ошибки, прежде чем перейти к следующей строке.

1 голос
/ 30 марта 2009

Кроме того, в конце первого метода pause () вам понадобится еще одна фигурная скобка:

public static void pause() 
{ 
    try 
    { 
      System.out.print("Press <Enter> to continue..."); 
      System.in.read(); 
    } 
    catch (Exception e)
    {
      System.err.printf("Error %s%c\n",e.getMessage(),7);
    }
}<-- this one is missing in yours

Надеюсь, это поможет!

0 голосов
/ 30 марта 2009

Я не знаю, в чем смысл упражнения - математические операции, перегрузка или меню. Но я бы порекомендовал вам начать с них в качестве основы. По крайней мере, они компилируются и запускаются:

public class MyMathOps
{
   public static int square(int x)
   {
       return x*x;
   }

   public static double square(double x)
   {
       return x*x;
   }

   public static int cube(int x)
   {
       return x*x*x;
   }

   public static double cube(double x)
   {
       return x*x*x;
   }

   public static int maximum(Integer... values)
   {
       Integer maxValue = Integer.MIN_VALUE;

       for (Integer value : values)
       {
           if (value.compareTo(maxValue) > 0)
           {
               maxValue = value;
           }
       }

       return maxValue;
   }

   public static double maximum(Double... values)
   {
       Double maxValue = Double.MIN_VALUE;

       for (Double value : values)
       {
           if (value.compareTo(maxValue) > 0)
           {
               maxValue = value;
           }
       }

       return maxValue;
   }

   public static int minimum(Integer... values)
   {
       Integer minValue = Integer.MAX_VALUE;

       for (Integer value : values)
       {
           if (value.compareTo(minValue) < 0)
           {
               minValue = value;
           }
       }

       return minValue;
   }

   public static double minimum(Double... values)
   {
       Double minValue = Double.MIN_VALUE;

       for (Double value : values)
       {
           if (value.compareTo(minValue) < 0)
           {
               minValue = value;
           }
       }

       return minValue;
   }

}

и тестовый класс (упрощенно):

public class MyMathOpsTest
{
    public static void main(String args[])
    {
        Integer [] intValues = { 1, 2, 3, };
        Double [] doubleValues = { 11.0, 14.0, -6.0 };

        for (Integer value : intValues)
        {
            System.out.println("value  : " + value);
            System.out.println("squared: " + MyMathOps.square(value));
            System.out.println("cubed  : " + MyMathOps.cube(value));
            System.out.println("min    : " + MyMathOps.minimum(intValues));
            System.out.println("max    : " + MyMathOps.maximum(intValues));
        }

        for (Double value : doubleValues)
        {
            System.out.println("value  : " + value);
            System.out.println("squared: " + MyMathOps.square(value));
            System.out.println("cubed  : " + MyMathOps.cube(value));
            System.out.println("min    : " + MyMathOps.minimum(doubleValues));
            System.out.println("max    : " + MyMathOps.maximum(doubleValues));
        }
    }
}

Когда это будет сделано, вы будете знать, что ваши методы верны. Избавьте себя от трудностей с чтением значений с первой попытки.

...