2014-01-23 4 views
-2

Хорошо, я написал этот класс RandomNumberGenerator.java, и я получаю сообщение об ошибке. По логике похоже, что это сработает, но это не так. Мне нужно иметь случайное число между двумя входами, что пользовательский ввод. Кто-то взглянет на мой код и посмотрит, где я ошибаюсь. Вот мой код:Генератор чисел с пользовательским вводом

import java.util.*; 

public class NumberGenerator 
{ 

// Begin 

    public static void main(String[] args){ 


    Scanner input; 
    int max, min, range; 
    Random gen; 

    public static int genRandom(int mod){ 
    Random r = new Random(); 
    } 


    input = new Scanner(System.in); 

    System.out.println("Please enter a max value: "); 
    max = input.nextInt(); 

    // Ask user to input max value 

    System.out.println(" Please enter a minimum value: "); 
    min = input.nextInt(); 

    // Ask user to input min value 

    range = Math.abs(r.nextInt()) % (max - min + 1) + min; 
    // Get random integer between min and max values using % 


    System.out.println(" Your generated number is: " + range); 

    } 
} 
+3

ваше сообщение об ошибке ...? Похоже, что было бы целесообразно опубликовать это. –

+0

Также рассмотрите форматирование кода, включая разумные и регулярные отступы, чтобы мы могли более легко прочитать его и помочь вам. –

+1

«... я получаю сообщение об ошибке ...» - будьте более конкретным. –

ответ

3

Неправильная структура кода. Метод getRandom (..) определяется внутри вашего основного метода. У вас также есть проблемы с определением области охвата (вы определяете переменную «r» внутри одного метода и пытаетесь использовать ее в другом).

Попробуйте начать с малого и сконцентрируйтесь на том, чтобы получить отступ вправо, тогда эти ошибки станут более очевидными.

+1

Ты добрался до меня! Вы явно не погладили свою бороду до публикации. –

+0

@Wallace - это дало мне смешок.:) – hoipolloi

1

Ваш метод,

public static int genRandom(int mod){ 
    Random r = new Random(); 
} 

находится внутри вашего основного метода. Вы не можете объявить один метод внутри другого точно так же. Вы должны объявить его вне основного метода. Кроме того, вы объявили, что он возвращает int, что означает, что вам действительно нужно заставить его возвращать int или он не будет компилироваться. Так что это так:

public static int genRandom(int mod){ 
    Random r = new Random(); 
    return r.nextInt(); // Add this line to return an int. 
} 

public static void main(String[] args) { 
    ... 
    // Call getRandom() in here where appropriate 
} 

Примечание
Суть этого ответа, чтобы помочь вам понять, почему ваш код не компилируется. Даже если вы получите код для компиляции, он, вероятно, будет вести себя неправильно. Другие ответы дают вам хорошие решения, чтобы заставить его работать правильно.

0

попробовать это

public class RandomRange { 
    public static void main(String[] args) { 
    int min = 50; 
    int max = 100; 
    for (int i = 0; i < 10; i++) { 
     int rnd = (int) ((Math.random() * (max + 1 - min))) + min; 
     System.out.println(rnd); 
    } 
    } 
} 
+0

Ваша версия здесь никогда не будет давать 'min' в результате. Это делает его хуже, а не лучше. –

+0

Чтобы быть справедливым, по крайней мере, это скомпилировалось бы. –

+0

спасибо, что указали это, я думаю, я исправил его сейчас. – Selim

1

После код будет работать. В основном у вас есть не окончательный метод внутри основного метода.

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

public class NumberGenerator { 

    // Begin 

    static Random r = new Random(); 

    public static void main(String[] args) { 

     Scanner input; 
     int max, min, range; 
     Random gen; 

     input = new Scanner(System.in); 

     System.out.println("Please enter a max value: "); 
     max = input.nextInt(); // Ask user to input max value 

     System.out.println(" Please enter a minimum value: "); 
     min = input.nextInt(); // Ask user to input min value 

     range = Math.abs(r.nextInt()) % (max - min + 1) + min; 
     // Get random integer between min and max values using % 

     System.out.println(" Your generated number is: " + range); 

    } 
} 
+1

Почему r статический? И почему у вас есть два случайных объекта. Пен не предназначен. – eddiecubed

+0

Да, это не предназначено, в основном я скопировал его код и переместил этот метод как статический Random. –

0

Вы объявляете объект:

Random gen; 

Затем вы создаете метод, называемый genRandom(int mod), который создает новый случайный объект 'r'. Который ВНУТРИ ваш основной метод. Это неверно.

Затем, когда вы переходите на вызов метода для получения случайного номера, вы выбираете «r», который не входит в объем заявления.

Разработчики не позволяют разработчикам безрассудно программировать. Теперь мне нужно взять клавиатуру.

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