2012-09-19 2 views
0
import javax.swing.JOptionPane; 

public class Speler 
{ 

    public String naam; 
    public String aantalKeerGespeeld; 
    public String behaaldePunten; 
    public String spelersInfo; 


    public String setNaam(){ 
     return naam = JOptionPane.showInputDialog("Hoe heet je?"); 
    } 

    public String setAantalKeerGespeeld(){ 
     return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?"); 
    } 

    public String setBehaaldePunten(){ 
     return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?"); 
    } 

    public String setSpelersInfo(){ 
     **return naam = JOptionPane.showInputDialog("Hoe heet je?"); 
     return aantalKeerGespeeld = JOptionPane.showInputDialog("Hoe vaak heb je gespeeld?"); 
     return behaaldePunten = JOptionPane.showInputDialog("Hoe veel punten heb je behaald?");** 


    } 
    public String getNaam(){ 
     return naam; 
    } 

    public String getAantalKeerGespeeld(){ 
     return aantalKeerGespeeld; 
    } 

    public String getBehaaldePunten(){ 
     return behaaldePunten; 
    } 

    public String getSpelersinfo(){ 
     return naam; 
     return aantalKeerGespeeld; 
     return behaaldePunten; 
    } 
}  

반환 값을 설정할 수없는 것 같습니다. Java를 배우기 시작 했으므로 어디에서든 대답을 찾기가 어렵습니다.메서드에서 여러 개의 return 문 사용

답변

-1

예. 올바른 것입니다. 메소드에 둘 이상의 return 문을 사용할 수 없습니다. 호출자 메소드로 POJO를 반환하고 거기에 값을 가져 오는 것은 어떻습니까?

+0

코드를 자세히 살펴보면 OP *는 POJO를 만듭니다. setter로부터 다른 POJO를 반환하는 것은별로 의미가 없다. –

1

아니요, 그런 식으로 하나 이상의 값을 반환 할 수 없습니다.

return 키워드가 작동하는 방식은 반환 된 값을 함수의 값으로 사용하여 호출 코드로 즉시 제어권을 반환한다는 것입니다. 첫 번째 반환 호출은 함수 자체를 종료하므로 후속 코드는 절대로 실행되지 않습니다.

일반적으로 이러한 방식으로 함수에서 여러 값을 반환 할 필요가 없습니다. 그러나 값 목록을 반환하려면 Container 객체 (예 : java.util.Vector의 객체)에 값을 패킹하고 벡터 객체를 반환 할 수 있습니다. 그러나 목록에있는 코드 중 어느 것이 든 필요하지는 않습니다.

그러나 게시 한 코드에서 함수의 값을 반환하는 대신 클래스의 인스턴스 변수를 JOptionPane 프롬프트로 설정해야합니다. 그런 다음 모든 할당이 완료되면 함수 끝에 하나의 return 문만 있습니다. 함수가 void으로 선언 된 경우 (즉, 값을 반환하지 않는 경우) 메서드 끝에 도달하면 종료 할 것이므로 끝에는 return; 행이 필요하지 않습니다. 때로는 return;을 갖는 것이 유용합니다 (예 : 여러 개의 반환 지점이있는 경우)하지만 다른 시간에 공부할 주제입니다.

+0

+1 반환 방법에 대해 설명합니다. 주어진 코드의 문맥에서, 컨테이너를 사용하는 것은 적절하지 않은 것처럼 보입니다. OP가 POJO를 만들고 있습니다. –

+0

사실입니다. 위의 코드에서 필요하지 않을 것이라는 점에 동의하지만 여러 값을 반환하는 방법에 대한 예제로 사용하려고했습니다. 나는 이것을 반영하기 위해 나의 대답을 편집했다. –

2

return 구문의 기본 사항은 프로그램이 현재 함수 (서브 루틴)를 종료하고 함수가 호출 된 곳, 즉 복귀 주소 인 것을 다시 시작한다는 것입니다.
함수를 입력하면 반환 주소가 호출 스택에 저장되어 쉽게 도달 할 수 있습니다.

따라서 코드의 경우 return 문을 발행 한 다음 다른 문을 발행하면 후자가 호출되지 않습니다.
내가 실수하지 않으면 대부분의 컴파일러에서 컴파일되지 않습니다.
따라서 모든 문자열을 함께 반환하는 return 문을 실행해야합니다.
Java 표준 라이브러리에서 사용할 수있는 많은 기본 Data Structures을 사용하여 수행 할 수 있습니다.이 작업에 관여하고 싶지 않은 경우 문자열을 하나의 큰 문자열에 추가 한 다음 분할 할 수도 있습니다.

하지만 지금은 기본 자바 서적/tutorial 또는 프로그래밍 언어에 대한 기본 서적을 읽는 것이 좋습니다.
Goodluck!

Link to some basic Java Data structures

편집 코드 - 전문가가 지적하고 올바른으로이 문제를 접근하는 가장 좋은 방법은 POJO 함께
, 당신은 그의 대답에 좋은 설명을 볼 수 있습니다.책을 읽고 내 의견에 기초를 이해하는 것이이 시점에서 기술 솔루션을 모두 뛰고 있지만

+0

+1 반환 방법에 대해 설명합니다. 주어진 코드의 문맥에서, 컨테이너를 사용하는 것은 적절하지 않은 것처럼 보입니다. OP가 POJO를 만들고 있습니다. –

+0

맞아, 고마워, 내 대답에 당신의 의견을 추가하고, ur 입력을 위해 +1 할거야. – Yarneo

0

많은 현대 언어는 여러 값을 반환 할 수있는 고급 기능을 가지고 있지만, 자바는 그렇지 않습니다. 실용적인 문제로서 다른 것을 선택해야합니다. 효율성을 제외한 모든면에서 100 % 허용되는 솔루션은 반환 값 집합을 보유하도록 설계된 새로운 클래스의 새 개체를 반환하는 것입니다. 즉;

class TwoStrings {String name; 문자열 주소; ...}

그리고 코드에서 return (new TwoStrings ("foo", "bar"));

완전히 받아 들일 수있는 또 다른 선택은 인터페이스를 리팩터링하는 것이므로 은 자연스러운 값입니다. 만약 당신이 "getXandY()를 원한다면, getX()와 getY()를 리펙토링한다.

" 주소 "로 설정하고 이름과 주소로로드 할 함수에 "사람 "을 제공하십시오 (아마도 성공의 지표를 반환 할 것입니다).

덜 비특이적 인 배열이나 벡터를 사용하여 여러 값

최소한 하나의 값을 반환하고 호출자가 사용하는 다른 값을 숨기려면 "부작용으로 반환"

3

코드를 자세히 살펴본 후 몇 가지 오해가있는 부분을 정리하고 싶습니다. 우선, 내가 볼 수있는 것부터, 당신은 당신의 방법들로부터 여러 값들을 반환 할 필요가 없다. 실제로 "set"이라는 단어로 시작하는 메서드 이름은 아무 것도 반환하지 않아야합니다. 반면에 변수의 값을 "설정"하려면 매개 변수를 취해야합니다. 예를 들어

public void setNaam(String newNaam){ 
    naam = newNaam; 
} 

이름을 얻으려면 JOptionPane 대화 상자를 사용하지 않습니다. 코드의이 시점에서 우리는 그 가치가 어디에서 왔는지 상관하지 않습니다. 다른 메소드는 실제로 사용자로부터 가치를 얻는 것을 담당합니다. 이 메소드는 나중에 사용하기 위해 값을 저장합니다. 당신은 내가 당신이이 중 하나에서 여러 값을 반환 할 필요가 없다는 주장 이유입니다, 내가 이것을 사용한다 getSpelersInfo()setSpelersInfo() 믿을

String spelersInfo; 

로 필드 선언이 또한

, 참고 행동 양식.

마지막으로 우리가 POJO이라고 부르는 것을 작성하는 것으로 보입니다. 머리 글자 어의 의미에 대한 자세한 내용은이 링크를 참조하십시오.