2013-05-17 2 views
1

Всего новичок здесь, пытаясь научиться Java с инструментами онлайн. Прямо сейчас Im явно делает что-то неправильно, поскольку я не могу понять, как получить отдельный файл класса, чтобы вернуть случайный int. Случайный код в порядке, его просто я не знаю, как на самом деле заставить его правильно вернуться! Наверное, кажется, что java 101 для многих из вас, но я потерял. lolJava Как правильно вернуть значение Int?

Я хочу, чтобы они были в отдельных файлах классов как excersize в том, как не помещать все в один файл. Это хорошо работает, если я просто помещу его в один класс, но это не то, что я хочу практиковать здесь. Спасибо за любую помощь!

Class файл 1:

package whatsthis; 

import java.util.Random; 
import java.util.Scanner; 

public class Noidea{ 

    private static Scanner user_input; 

    public static void main(String[] args) 
    { 
     System.out.println("Git is awesome"); 

     Scanner user_input = new Scanner(System.in); 
     randnum rn = new randnum(); 
     System.out.println("RANDOM NUM: " +rn); 

     System.out.println("What is your name?"); 
     String first_name; 
     first_name = user_input.next(); 
     System.out.println("Hello, "+first_name); 

     int health = 100; 

     while(health>0) 
     { 
      //System.out.println(rndNum); 
      //System.out.println(rndNum); 

      System.out.println(health); 
      System.out.println("Attack? Y/N"); 
      String attack; 
      attack = user_input.next(); 

      if (attack.equals("Y")){ 
       System.out.println("KILL!"); 
       System.out.println("You've done " + rn + " damage!"); 
       //health = health - rn; 
       System.out.println(health); 

      } else { 
       System.out.println("cower.."); 
      } 
     } 
    } 
} 

Class файл 2:

package whatsthis; 

import java.util.Random; 

public class randnum 
{ 
    public int randnum() 
    { 
     int Low = 10;        //Used for lowened number in random 
     int High = 15;        //Used for highend number in random 
     Random rndGen = new Random();    //Declare a new 'random' object 
     int rn = rndGen.nextInt(High-Low) + Low; //Proper random between two numbers (high and low) 

     return rn; 
    } 
} 

Вместо номера им ищет, он возвращает [email protected] Почему ИОС это и как делать Я чиню это? Извините еще раз, если это очень просто.

+1

Я бы сменил public int randnum() на public static int getrand(), а затем вызвал его, используя int rn = randnum.getrand(). Не используйте одно и то же имя для класса и метода внутри этого класса, если только метод не является конструктором. – jarmod

+1

Привет, Пол, хороший вопрос, который вы получили там. Очень специфично. Я просто хочу прокомментировать ваш класс «randnum». Когда вы создаете класс, каждая первая буква класса должна быть в верхнем регистре. В вашем случае это должен быть RandNum. Надеюсь, эта помощь поможет вам в обучении. Удачи! –

ответ

2

ли это:

randnum rn = new randnum(); 
int i = rn.randnum(); 

Также читайте о Code Conventions for the Java Programming Language.

+0

Ahh спасибо! Я понятия не имел, что так было. Человек это сбивает с толку сначала, когда я пропускаю определенные вещи. На этот раз он отлично справился! –

4

Ты почти там - вызвать метод класса X из любого класса Y, вам просто необходимо создать экземпляр класса X в классе Y (как вы уже сделали, создав randnum объект в вашем NoIdea классе), то вы можете вызвать его методы следующим образом:

int num = rn.randnum(); 
//do something with num 

Для записи это как принятая конвенция Java для использования названий классов ...

+1

У него уже есть экземпляр. –

+1

Действительно, он делает, не смотрел достаточно внимательно :) – drewmoore

+0

Спасибо! Оценил ввод –

2

Для того, чтобы получить случайное число, вам нужно будет вызвать метод randnum в классе randnum через int i = rn.randnum();.

Если вы хотите создать случайное число из начала, доступное в любое время, вы можете создать значение int, которое можно вызывать вне класса.

public class randnum 
{ 
    public int number; 

    public randnum() { 
     int Low = 10; 
     int High = 15; 
     Random rndGen = new Random(); 

     //initialize the number! 
     number = rndGen.nextInt(High-Low) + Low; 
    } 

    public int getNumber() { 
     return number; 
    } 
} 

Конструктор (public randnum() {...) называется как только объект инициализируется (с new randnum();). Таким образом, randnum number = new randnum(); создает новый объект, который содержит случайное число, к которому можно получить доступ, указав number.number; или number.getNumber();.

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

public static int randnum() { 
    int Low = 10; 
    int High = 15; 
    Random rndGen = new Random(); 
    int number = rndGen.nextInt(High-Low) + Low; 

    return number; 
} 

static ключевое слово делает этот метод доступным везде, даже не создавая дополнительный объект. Так что на этот раз вы сможете просто сказать int number = randnum.randnum();.

+1

Очень информативный. Спасибо. Ill закладок этой страницы для дальнейшего обращения –

1

Я сделал небольшое изменение в вашем коде. Названия классов должны быть капитализированы с использованием upper camel case. Randnum.java

package whatsthis; 

import java.util.Random; 

public class Randnum 
{ 
    public int randnum() 
    { 
     int Low = 10;        //Used for lowened number in random 
     int High = 15;        //Used for highend number in random 
     Random rndGen = new Random();    //Declare a new 'random' object 
     int rn = rndGen.nextInt(High-Low) + Low; //Proper random between two numbers (high and low) 

     return rn; 
    } 
} 

Noidea.Java

package whatsthis; 

import java.util.Scanner; 

public class Noidea{ 

private static Scanner user_input; 

public static void main(String[] args) 
{ 
    System.out.println("Git is awesome"); 

    Scanner user_input = new Scanner(System.in); 
    int rn = new Randnum().randnum(); 
    System.out.println("RANDOM NUM: " +rn); 

    System.out.println("What is your name?"); 
    String first_name; 
    first_name = user_input.next(); 
    System.out.println("Hello, "+first_name); 

    int health = 100; 

    while(health>0) 
    { 
     //System.out.println(rndNum); 
     //System.out.println(rndNum); 

     System.out.println(health); 
     System.out.println("Attack? Y/N"); 
     String attack; 
     attack = user_input.next(); 

     if (attack.equals("Y")){ 
      System.out.println("KILL!"); 
      System.out.println("You've done " + rn + " damage!"); 
      health = health - rn; 
      System.out.println(health); 

     } else { 
      System.out.println("cower.."); 
     } 
    } 
} 
} 
+1

Поскольку 'Randnum' должен использовать' Random' много раз, сделайте его переменной экземпляра: 'private Random rndGen = new Random();' Также не делайте так много работы в 'main'. Создайте экземпляр 'Noidea' в' main' и выполните эту работу. Вы можете взять большую часть логики и переместить ее на более короткие методы, что лучше для тестирования. –

+0

Gotcha. То, что я собираюсь, раскалывая вещи и из основного в их собственные части для легкого управления, просто застрял здесь :) –

2

Вы, вероятно, не хотите использовать объект randnum, вместо этого вы просто хотите получить доступ к методу «randnum()». Я бы забыл об объектах (т. Е. Использовал ключевое слово «новое») и сделал метод static, что означает, что есть только один его экземпляр (если вы еще не знаете об объектах, не беспокойтесь об этом. означает, что вам не нужно использовать «новое», но это также означает, что у вас не может быть двух разных копий (например, вы хотели, чтобы два разных оружия наносят разный урон, поэтому вы можете повторно использовать randnum() с разными значениями Low и High и эти значения будут ограничены в двух экземплярах.))

`public static int randnum() 
    { 
     int Low = 10;        //Used for lowened number in random 
     int High = 15;        //Used for highend number in random 
     Random rndGen = new Random();    //Declare a new 'random' object 
     int rn = rndGen.nextInt(High-Low) + Low; //Proper random between two numbers (high and low) 

     return rn; 
    }` 

Таким образом, вы можете быть просто как int rn = randnum.randnum(). Это делает вещи менее запутанными, поскольку также вы обычно не называете методы внутри класса тем же именем, что и класс, если только это не конструктор, который является чем-то особенным для объектов. Еще одна вещь, большинство методов называются глаголами, такими как getRandNum(), поскольку методы - это действия.

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