2013-11-17 4 views
0

У меня есть вопросы в соответствии с примерами и вводами с использованием System.in.Java: экземпляр доступа и ввода System.in

Первые экземпляры:

Я создал переменную экземпляра, названные woodenSword с:

Sword woodenSword=new Sword("Wooden Sword", 2); 

public Sword(String nameSword, int damageSword){ 
     this.nameSword=nameSword; 
     this.damageSword=damageSword; 
     numberOfSwords++; 
} 

Теперь я хочу, чтобы получить доступ к damageSword, но как я могу это сделать? Я попробовал woodenSword.damageSword, но, видимо, это не сработало ... Я думал, что это потому, что я сделал переменные private, но я не хочу это менять, потому что я где-то читал, что лучше хранить переменные private. (И вопрос с вопросом: почему лучше держать переменные частными?)

И еще вопрос: как я могу получить ввод с System.in? Нужно ли это делать с System.in.toString()?

Должен ли я использовать функцию для этого? Чтобы получить частные переменные из класса и поместить эту функцию в класс? Я думал об этой функции:

public static int getSwordStats(String nameSword){ 
    damageSword=nameSword.damageSword; 

} 

Но, я получаю сообщение об ошибке на nameSword.damageSword, я думаю, что он не понимает, что это переменная ... Как я могу это исправить?

Надеюсь, вы можете мне помочь!

+0

Для чтения из консоли System см это http://stackoverflow.com/questions/4644415/how-to-get-input-from-console-class-in -java –

ответ

3

Похоже, ваш класс меч отвечает за отслеживание 3 вещи:

  1. Имя каждого меча
  2. Урон от каждого меча
  3. Общее количество мечей

Первые два должны быть переменными-членами, а последние должны быть статической переменной.

public class Sword { 
    // private (so no one can access it but Sword) 
    // static (so it belongs to the class Sword and not any specific Sword) 
    private static int numberOfSwords = 0; // initialize to 0 
    // public accessor method 
    public static int getNumberOfSwords() { 
     return numberOfSwords; 
    } 
    // notice there's no "setNumberOfSwords" - no one can come along and change 
    // our data - it's 'encapsulated' in the class 

    private String name; // private 
    private int damage; // private 

    public Sword(String name, int damage) { 
     this.name = name; 
     this.damage = damage; 
     numberOfSwords++; // the only place we change number of swords 
    } 

    // this is how people outside Sword access the name 
    // note that we could add a "setName(String name)" if we want 
    public String getName() { 
     return name; 
    } 

    // same with name - protect and provide an accessor 
    public int getDamage() { 
     return damage; 
    } 
} 

В более позднем классе, теперь вы можете это сделать:

Sword wood = new Sword("Wooden Sword", 2); 
System.out.println("wood's name is " + wood.getName()); 
System.out.println("wood's damage is " + wood.getDamage()); 
System.out.println("swords crafted so far: " + Sword.getNumberOfSwords()); 

Sword mithril = new Sword ("Mithril Sword", 10); 
System.out.println("mithril 's name is " + mithril .getName()); 
System.out.println("mithril 's damage is " + mithril .getDamage()); 
System.out.println("swords crafted so far: " + Sword.getNumberOfSwords()); 

Что напечатает

Wooden Sword 
2 
1 
Mithril Sword 
10 
2 

Для вашего второго вопроса, то есть некоторые большие ресурсы, которые я уверен, Google может помочь вам найти. Как простой пример, вот что я делаю:

// assumes you "import java.util.Scanner" 
Scanner sc = new Scanner(System.in); 
while(sc.hasNextLine()) { 
    String line = sc.nextLine(); 
    System.out.println("You typed: " + line); 
} 
+0

Хорошо! Спасибо: D – ikhebgeenaccount

+0

Я добавил несколько комментариев, которые объясняют решения, которые я принял в классе Sword – corsiKa

1

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

public int getDamage() { 
    return this.damageSword; 
} 

(обратите внимание, что я назвал метод getDamage(), а не getDamageSword() Метода находится в классе Sword. Включение меча повсюду бесполезно, только добавляет шум и делает код менее удобочитаемым).

Относительно вашего второго вопроса. да, System.in - стандартный поток ввода. toString() не возвращает то, что вводит пользователь. Прочтите javadoc этого класса, чтобы понять, как он работает. Также читайте Java IO tutorial, в котором есть раздел о командной строке.

Что касается последней части, ваш код пытается получить повреждение строки. Строки не имеют повреждений. Мечи имеют урон.

Смежные вопросы