2014-10-24 3 views
0

저는 cyclingmanager 게임을 가지고 있고 라이더 목록을 이름으로 보여주고 싶습니다. 그리고 라이더를 선택할 때 능력을 보여주고 싶습니다. 프로그램이 잘 컴파일되고 실행됩니다. 문제점은 라이더() 메소드에 있습니다. 첫 번째 라이더 인 c1을 인쇄하지 않습니다. 미리 감사드립니다.오브젝트로 고생하다가 프로그램이 예상대로 작동하지 않습니다. (java)

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class CyclingManager2 { 
public static void main(String[] args) { 

    //menyvalgene 
    Menu m = new Menu(); 

    m.choice(); 


    } 
} 

class Menu { 
Scanner in = new Scanner(System.in); 
Cyclist cy = new Cyclist(); 

//choices 
public void choice() { 

    int choice = -1; 
    while (choice != 0) { 

     System.out.println("Choose something: "); 
     System.out.println("-0 will exit the program" + "\n-Pressing 1 will open the database menu"); 
     choice = in.nextInt(); 
     switch(choice) { 
      case 0: choice = 0; break; 
      case 1: database(); break; 
      default: System.out.println("You have to choose either 0 or 1"); break; 
      } 

     } 
    } 
public void database() { 

    System.out.println("Welcome to the database \nThese are the options:\n0 = Back to menu\n1: Riders"); 
    int dbChoice = -1; 

    while (dbChoice != 0) { 

     System.out.println(); 
     dbChoice = in.nextInt(); 
     switch(dbChoice) { 
      case 0: dbChoice = 0; break; 
      case 1: cy.riders(); System.out.println("Press 0 for going back to the menu\nPress 1 for showing the riders");break; 
      default: System.out.println("Choose either 0 or 1"); break; 
     } 

    } 
} 

} 

class Cyclist { 

List<Cyclist> cyclists = new ArrayList<>(); 
private String name; 
private int mountain; 
private int timeTrial; 
private int sprint; 
private int age; 
Cyclist c1 = null; 


public void setName(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setMountain(int mountain) { 
    this.mountain = mountain; 
} 

public int getMountain() { 
    return mountain; 
} 


public void setTimeTrial(int timeTrial) { 
    this.timeTrial = timeTrial; 
} 

public int getTimeTrial() { 
    return timeTrial; 
} 

public void setSprint(int sprint) { 
    this.sprint = sprint; 
} 

public int getSprint() { 
    return sprint; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public int getAge() { 
    return age; 
} 


public void riders() { 
    abilities(); 
    for (int i = 0; i < cyclists.size(); i++){ 
      System.out.print(((Cyclist) cyclists).getName()); 
    } 

} 



public void abilities() { 

    //Pardilla is created 

    c1 = new Cyclist(); 
    c1.setName("Sergio Pardilla"); 
    c1.setMountain(75); 
    c1.setTimeTrial(60); 
    c1.setSprint(60); 
    c1.setAge(30); 

    /*System.out.println(c1.getName() + "'s abilities:"); 
    System.out.println("Mountain - " + c1.getMountain()); 
    System.out.println("TimeTrial - " + c1.getTimeTrial()); 
    System.out.println("Sprint - " + c1.getSprint()); 
    System.out.println("Age - " +c1.getAge()); 

    cyclists.add(c1); //adds Pardilla to cyclists arraylist*/ 
    } 

} 
+0

라이더() 메소드는 세르지오 파르 딜라 (C1) – p3ob2lem

답변

2

난 당신처럼 뭔가 더 할 생각 :

public void riders() { 
    abilities(); 
    for (int i = 0; i < cyclists.size(); i++){ 
      System.out.print(cyclists.get(i).getName()); 
    } 
} 

또 다른 일을, 당신이 List<Cyclist> cyclists = new ArrayList<>();Cyclist 클래스의 일부가 될하려는 모르겠어요 것입니다.

+0

으로 ArrayList의 이름을 출력한다 쉬운 솔루션은 내가 일반적으로 강화 된 버전 이상의 루프를 선호합니다. 대단히 감사합니다. 이것은 제 프로그램을 개선하는 데 사용한 대답입니다. – p3ob2lem

2

는 당신이 이것에 대한 루프 :

for (int i = 0; i < cyclists.size(); i++) { 
    System.out.print(((Cyclist) cyclists).getName()); 
} 

작동하지 않을. cyclists (ArrayList) 전체를 하나의 cyclist 인스턴스로 전송 중입니다. ArrayList의 내용을 반복하고 각 Cyclist -배열에있는 객체를 가져 오려고 할 것입니다. foreach는 루프보십시오 :

for (Cyclist cyclist : cyclists) { 
    System.out.print(cyclist.getName()); 
} 

또는 인덱스 기반 검색과 루프를 사용

for (int i = 0; i < cyclists.size(); i++) { 
    cyclists.get(i).getName()); 
} 
+0

나는 이제, 엘리야에게 감사한다. :) – p3ob2lem

1

두 가지 문제 :

  1. 당신이 ArrayList에 라이더를 추가하는 부분이다 주석 처리했다.
  2. 귀하의 ArrayList을 반복하는 방법은 결코 정확하지 않습니다. 이 같은 시도 :

    for (Cyclist cyclist : cyclists) { 
        System.out.println(cyclist.getName()); 
    } 
    
+0

런타임 오류가 발생하지 않도록하기 위해 주석 처리했습니다. 답변 해 주셔서 감사합니다 <3 – p3ob2lem

0
당신은 번호를 호출하여 목록에서 개체를 얻어야한다

: cyclists.get(i).getName())

관련 문제