簡體   English   中英

與對象作斗爭,程序無法按預期運行(java)

[英]Struggling with objects, program does not work as expected(java)

因此,我有一個騎自行車經理的游戲,我想按名稱顯示騎手名單,然后在用戶選擇騎手時顯示他們的能力。 該程序可以編譯並很好地運行,問題出在我的riders()方法中,只是沒有打印出我的第一個騎士c1。 提前致謝。

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*/
    }

}

我認為您想要更多類似的東西:

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類的一員。

您有這個for循環:

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

它不會起作用。 您正在將整個cyclistsArrayList )強制轉換為一個cyclist實例。 你可能想遍歷內容ArrayList ,並得到各Cyclist中-object cyclists陣列。 嘗試一個foreach循環:

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

或在基於索引的檢索中使用for循環:

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

兩個問題:

  1. 將騎手添加到ArrayList已被注釋掉。
  2. 循環遍歷ArrayList的方式絕不是正確的。 嘗試這樣:

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

您應該通過調用Number來從List中獲取Objects: cyclists.get(i).getName())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM