2012-03-28 2 views
0

Я работаю над домашним заданием, и я рядом, но у меня проблема. Я просто научился работать с пакетами в eclipse, поэтому у меня есть класс, который импортирует другой класс из пакета (я думаю, что я сказал это правильно) Главное приглашает пользователя ввести целое число от -100 до 100, и у меня есть проблема с его проверкой. Я знаю, что проблема заключается в том, где я импортирую. Я просто не уверен, как мне нужно идти, чтобы исправить это.Импорт? работа с пакетами

Это раздел моего основного кода. (Мой вопрос начинается с последней парой строк, если вы хотите, чтобы пропустить вперед)

import myUtils.util.Console; 

    public class ConsoleTestApp 
    { 
     public static void main(String args[]) 
     { 
      // create the Console object 
      Console c = new Console(); 

      // display a welcome message 
      c.println("Welcome to the Console Tester application"); 
      c.println(); 

      // int 
      c.println("Int Test"); 
      int i = c.getIntWithinRange("Enter an integer between -100 and 100: ", -101, 101); 
      c.println(); 

В этой последней строке кода

int i = c. 

я получаю искаженную черту под I, который говорит мне, что я не использую локальная переменная, поэтому я не уверен, что именно фиксирует это в этой ситуации, так как я пытаюсь использовать ее в другом классе. Нужно ли создавать объект?

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

package myUtils.util; 

import java.util.Scanner; 

public class Console 

{ 
Scanner sc = new Scanner(System.in); 
public void print(String s) 
{ 
    System.out.println(); 
} 

public void println(String s) 
{ 
    System.out.println(); 

} 

public void println() 
{ 
    System.out.println(); 

} 

public int getIntWithinRange(String prompt, int min, int max) 
{ 

    int i = 0; 
    boolean isValid = false; 
    while (isValid == false) 
    { 
     System.out.println(prompt); 
     if (sc.hasNextInt()) 
     { 

      i = sc.nextInt(); 
       if (i < min) 
       { 
        System.out.println("Error! Please enter an integer greater than -100"); 
       } 

       else if (i > max) 
       { 
        System.out.println("Error! Please enter an integer less than 100"); 
       } 

       else 
        isValid = true; 
     } 

     else 
     System.out.println("Error! Invalid number value"); 
     sc.nextLine(); 

    } 
     // return the int 
     return i; 

} 

public double getDoubleWithinRange(String prompt, double min, double max) 
{ 

    int d = 0 ; 
    boolean isValid = false; 
    while (isValid == false) 
    { 
     System.out.println(prompt); 
     if (sc.hasNextInt()) 
     { 
      //if user chooses menu option less than 1 the program will print an error message 
      d = sc.nextInt(); 
       if (d < min) 
       { 
        System.out.println("Error! Please select menu option 1, 2, or 3"); 
       } 
       //if the user chooses a menu option greater than 3 the program will print an error 
       else if (d > max) 
       { 
        System.out.println("Error! Please select menu option 1, 2, or 3"); 
       } 
       //if the option is between 1 and 3 the menu option is valid 
       else 
        isValid = true; 
     } 

     else 
     System.out.println("Error! Invalid number value"); 
     sc.nextLine(); 

    } 
     // return the int 
     return d; 

} 


public String getRequiredString(String prompt) 
{ 
    return prompt; 

} 

public String getChoiceString(String prompt, String s1, String s2) 
{ 
    return s2; 

} 

public int getInt(String prompt) 
{ 
    return 0; 

} 

}

, когда я запускаю это я получаю мой последний отпечаток, который является недопустимым значением числа. Я не импортирую код из основного метода на другой консоли правильно?

+1

Вероятно, несвязанные, но 'println (String s)' и 'print (String s)' ничего не делают с их аргументом. –

+0

@Mike Samuel Я только начал писать код и получил некоторые спецификации на то, что мне нужно, поэтому я прыгнул в него. Не самый чистый способ писать, но я хотел решить каждый метод в самом простом и сложном порядке. –

ответ

2

Это не проблема импорта. Если вы импортируете что-то не так, ваша программа не будет компилироваться в первую очередь или на минимальном минимуме не будет запущена.

Насколько реально исправить ошибку, я бы рекомендовал смотреть на этих двух линий вы думать связаны с внешней else в getIntWithinRange и принимая во внимание, какой код на самом деле связано с else и какой код не является. Основная проблема заключается в том, что if или else связаны только с одной строкой, если вы не окружите несколько строк фигурными фигурными скобками. Таким образом, вы должны изменить последний else из getIntWithinRange выглядеть

else { 
    System.out.println("Error! Invalid number value"); 
    sc.nextLine(); 
} 

EDIT: В ответ на обновленный вопрос

я получаю волнистую линию под I, который говорит мне, я не использую локальную переменную, поэтому я не уверен, что именно фиксирует это в этой ситуации, так как я пытаюсь использовать ее в другом классе. Нужно ли создавать объект?

Прямо сейчас, код, который вы написали не использует i в main. Это включает в себя не передачу его каким-либо другим методам или любому конструктору. Поскольку i является локальной переменной, она недоступна вне main, поэтому Eclipse предупреждает вас. Это предупреждение «коротко красной линии» от Eclipse не остановит ваш код от компиляции и работы просто отлично, но он призван помочь вам найти ошибки в вашем собственном коде.

В более широкой заметке есть много ошибок, которые возникают из-за неиспользуемых локальных сетей, и Eclipse хочет помочь вам предотвратить эти ошибки.Рассмотрим пример того, как вы хотите инициализировать все элементы двумерного массива на некоторый номер, предоставленный пользователем (имена переменных короче, чем я буду использовать в реальной программе, но они все равно получают точку):

public static final int N = 10; 

public void main(String[] args) { 
    int[][] a = new int[N][N]; 
    int n = /* Read number from the user */; 

    for (int i = 0; i < N; i++) { 
     for (int j = 0; j < N; j++) { 
      a[i][j] = i; // Bug - we meant to initialize to n 
     } 
    } 

    // ... 
} 

Значок Eclipse для неиспользуемых местных жителей помогает вам легче найти эти ошибки.

+0

Спасибо! Я думаю, это исправлено. Я не понял этого в своем коде. Я только что редактировал свой вопрос, который я заметил в своем первом классе (этот первый раздел кода, который я опубликовал). Я получаю сообщение о строке кода int i = c Это говорит мне, что я не использую локальную переменную. Нужно ли мне это беспокоиться? Я не совсем уверен, что с этим делать, поскольку я думал, что я передаю эту информацию в другой класс. –

+0

@JeremyB Я отредактировал свой ответ, чтобы объяснить, почему Eclipse показывает эту ошибку. Когда вы «принесете эту информацию в другой класс», передав «i» конструктору, красноватая линия будет уходить. –