2012-03-28 3 views
0

나는 숙제를하고 있는데 가까이 있지만 문제가있다. 방금 패키지에서 다른 클래스를 가져 오는 클래스가 있으므로 이클립스에서 패키지로 작업하는 법을 배웠다. (나는 올바르게 말한 것으로 생각한다.) 메인은 사용자에게 -100과 100 사이의 정수를 입력하라는 메시지를 표시하고 나는 가지고있다. 그것을 확인하는 문제. 문제는 내가 가져 오는 곳이라는 것을 알고 있습니다. 문제를 해결하기 위해 필요한 방향을 확신 할 수 없습니다.가져 오기? 패키지로 작업하기

이것은 내 주요 코드 섹션입니다. 나는 아래 구불 구불 한 선을 얻을 코드

int i = c. 

의 마지막 줄에서

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(); 

을 내가 사용하고 있지 않다 알려줍니다 그 (당신이 건너 뛰려면 내 문제는 지난 몇 라인으로 시작) 그래서 내가 다른 클래스에서 그것을 사용하려고하기 때문에이 상황에서 정확히 무엇을 고칠 지 확신하지 못한다. 객체를 만들어야합니까?

콘솔을 가져 와서 제대로 가져온 다른 패키지에있는 클래스가 있습니다. 여기 내 콘솔 클래스에 고정되어있는 코드입니다.

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; 

} 

}

내가 잘못된 숫자 값입니다 내 마지막 인쇄가 계속이 프로그램을 실행할 때. 다른 콘솔의 main 메소드에서 코드를 제대로 가져 오지 못했습니까?

+1

아마 관련이 없지만'println (String s)'와'print (String s)'는 인자와 함께 아무 일도하지 않습니다. –

+0

@ Mike Samuel 방금 코드를 작성하기 시작했고 필요한 항목에 대한 스펙이 주어 졌으므로이 코드에 뛰어 들었습니다. 가장 깨끗한 방법은 아니지만 각 방법을 가장 쉬운 순서로 다루기를 원했습니다. –

답변

2

이것은 가져 오기 문제가 아닙니다. 잘못된 것을 가져 오는 경우, 프로그램은 처음부터 컴파일되지 않거나 최소값으로 실행되지 않습니다.

는 지금까지와 같은 실제로 문제를 해결, 당신이이 getIntWithinRange에서 가장 바깥 쪽 else과 관련된 생각 두 줄을보고 실제로 어떤 코드 else과와 연관된 코드를 고려하지 않는 것을 권 해드립니다. 주된 문제는 복수 줄을 중괄호로 묶지 않는 한 if 또는 else은 한 줄과 만 연결된다는 것입니다. 그래서, 당신은

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

편집처럼 보이게 getIntWithinRange의 마지막 else을 수정해야합니다 : 대응 내게 알려줍니다

은 내가 아래 구불 구불 한 선을 얻을 업데이트 된 질문에 로컬 변수를 사용하지 않으므로 다른 클래스에서이 변수를 사용하려고하기 때문에이 상황에서 정확히 무엇이 수정되는지 확신 할 수 없습니다. 객체를 만들어야합니까?

지금 작성한 코드는 maini을 사용하지 않습니다. 여기에는 다른 방법이나 생성자에 전달하지 않는 것이 포함됩니다. i은 로컬 변수이므로 main 외부로 액세스 할 수 없으므로 Eclipse에서 경고합니다. Eclipse에서 "squiggly red line"경고가 발생해도 코드 작성 및 실행이 중단되지는 않지만 코드에서 버그를 찾는 데 도움이됩니다.

더 넓은 노트에서 사용되지 않는 지역 주민 때문에 발생하는 많은 버그가 있으며 이클립스는 이러한 버그를 방지하기 위해 도움을 원합니다.2 차원 배열의 모든 요소를 ​​사용자가 제공 한 숫자로 초기화하려는 예제를 생각해보십시오 (변수 이름은 실제 프로그램에서 사용하는 것보다 짧지 만 계속 가로 질러 나타납니다).

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"를 생성자에 전달하여 "다른 클래스에 정보를 가져 오면"빨간색 선이 사라집니다. –

관련 문제