2015-10-10 1 views
0

Я смущен тем, что я делаю неправильно здесь, я новичок с java, поэтому, пожалуйста, со мной. Кто-нибудь должен объяснить? Он компилируется и запускается, но я продолжаю получать ошибку в строке 50, которая является обратной линией.Метод возврата max Значение не работает

Также, если я изменю приведенный ниже код на «int max = (number1, number2)», я получаю сообщение об ошибке символа ошибки. Любая помощь будет оценена.

int max = max(num1, num2); 
import java.io.*; 
import java.util.Scanner; 

public class MethodLab { 

    public static void main(String[] args) { 
    // variable declarations for part 1 
    String title; 
    String firstName; 
    String lastName; 
    Scanner in = new Scanner(System.in); 
    // prompt for input for part 1 
    System.out.print("Enter a title:"); 
    title = in.next(); 
    System.out.print("Enter your first name:"); 
    firstName = in.next();  
    System.out.print("Enter a your last name:"); 
    lastName = in.next(); 
    // call the method for part 1 
    greeting(title, firstName, lastName); 

    // variable declarations for part 2 
    int number1; 
    int number2; 
    // user prompts for part 2 
    System.out.print("Enter first number:"); 
    number1 = in.nextInt(); 
    System.out.print("Enter second number:"); 
    number2 = in.nextInt(); 
    // call the method for part 2 inside the println statement 
    System.out.println("The largest number is " + max(number1, number2)); 
} 

/******************** greeting method goes here*********************/ 
    public static void greeting(String proper, String fname, String lname){ 
    System.out.println(); 
    System.out.printf("Dear " + proper +" "+ fname + " "+ lname); 
    System.out.println(); 
    } 






    /***********************end of method*************************/ 

    /******************** max method goes here*********************/ 
    public static int max(int num1,int num2){ 
    int max = max(num1, num2); 
    return max; 
    } 
+0

'int max = max (num1, num2);' вы хотите вызвать тот же метод здесь или какой-либо другой метод. – YoungHobbit

+0

Спасибо, что заставило меня понять, что я на самом деле звонил. Иногда я так сильно догоняюсь, что перехожу к пропущенным очевидным вещам. – BlueJay

ответ

2

int max = Math.max(num1, num2) Используйте это возвращает максимальное число.

0

В вашем макс (интермедиат num1, внутр num2) нет никакой логики, это просто называть себя так никогда не закончится:

использование, как показано ниже:

import java.io.*; 
import java.util.Scanner; 

public class MethodLab { 

    public static void main(String[] args) { 
    // variable declarations for part 1 
    String title; 
    String firstName; 
    String lastName; 
    Scanner in = new Scanner(System.in); 
    // prompt for input for part 1 
    System.out.print("Enter a title:"); 
    title = in.next(); 
    System.out.print("Enter your first name:"); 
    firstName = in.next();  
    System.out.print("Enter a your last name:"); 
    lastName = in.next(); 
    // call the method for part 1 
    greeting(title, firstName, lastName); 

    // variable declarations for part 2 
    int number1; 
    int number2; 
    // user prompts for part 2 
    System.out.print("Enter first number:"); 
    number1 = in.nextInt(); 
    System.out.print("Enter second number:"); 
    number2 = in.nextInt(); 
    // call the method for part 2 inside the println statement 
    System.out.println("The largest number is " + max(number1, number2)); 
} 

/******************** greeting method goes here*********************/ 
    public static void greeting(String proper, String fname, String lname){ 
    System.out.println(); 
    System.out.printf("Dear " + proper +" "+ fname + " "+ lname); 
    System.out.println(); 
    } 






    /***********************end of method*************************/ 

    /******************** max method goes here*********************/ 
    public static int max(int num1,int num2){ 
    return num1 > num2 ? num1 : num2; 
    } 
1
public static int max(int num1,int num2){ 
    int max = max(num1, num2); 
    return max; 
    } 

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

public static int max(int num1,int num2){ 
    int max = num1>num2?num1:numb2; // return the highest number. 
    return max; 
    } 

EDIT: Поскольку вы упомянули, что являетесь новичком в программировании, позвольте мне добавить еще несколько деталей. Если вы находитесь в методе A и вы вызываете метод B, некоторое количество места в сегменте стека зарезервировано, так что элемент управления знает местоположение линии в методе A, чтобы возобновить выполнение после завершения метода B. В вашем случае максимальный метод вызывает метод max снова и снова. Это прямо означает, что все больше места в сегменте стека резервируется для каждого вызова метода. И в какой-то момент у него заканчивается доступное пространство в стеке, и вы столкнулись бы с такой проблемой StackOverflow.

В общем, любой метод, вызывающий себя без изменения входов, является красным флагом в большинстве сценариев. Это относится к вашему методу max.

+0

Спасибо! Ваши данные действительно помогли мне! – BlueJay