2013-04-06 3 views
0

지금까지 세 권의 책을 구입했으며 여러 개의 비디오를 시청했는데 왜 컴파일되지 않는지 아직 확실하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 신용 카드 번호의 파일을 읽고 사용자가 내 메인에 입력 한 번호를 확인하려고합니다. 필자가 메인에서 isValid 메소드를 호출하면 배열을 인수로 사용해야한다는 것을 확신하지만, '.class'를 얻을 때 예상됩니다. (어떤 도움을 주셔서 감사합니다)'배열'메서드를 호출 할 때 예상되는 오류가 발생했습니다.

import java.util.Scanner; 
    import java.io.*; 

    public class Validator1 
    { 
     int[] valid;  

    public Validator1()throws IOException 
    { 

    } 

    public Validator1(String fileName)throws IOException 
    { 
     int beginning = 0; 
     int place = 0; 
     int size = 0; 

     File file = new File(fileName); 
     Scanner inputFile = new Scanner(file); 
     Scanner inputFile2 = new Scanner(file); 

     while(inputFile.hasNextInt()) 
     { 
      size++; 
      inputFile2.nextInt(); 
     } 


     while(inputFile2.hasNextInt() && place < valid.length) 
     { 
      valid[place] = inputFile2.nextInt(); 
      place++; 
     } 

    } 

    public void sort(int[]valid) 
    { 
     valid = new int[valid.length]; 
     for(int start = 0; start < valid.length; start++) 
     { 
      int lowestValue = valid[start]; 
      int lowestIndex = start; 
      for(int i = start + 1; i < valid.length; i++) 
      { 
       if(valid[i] < lowestValue) 
       { 
       lowestValue = valid[i]; 
       lowestIndex = i; 
       } 
      } 
      int temp = valid[start]; 
      valid[start] = valid[lowestIndex]; 
      valid[lowestIndex] = temp; 
     } 
    } 

    public boolean isValid(int[] valid, int number) 
    { 
     int low =0; 
     int high = valid.length-1; 
     while(high >= low) 
     { 
      int middle = (high + low)/2; 
      if(valid[middle] == number) 
      { 
       return true; 
      } 
      if (valid[middle] < number) 
      { 
       low = middle +1; 
      } 
      if(valid[middle] > number) 
      { 
       high = middle-1; 
      } 
     } 
     return false; 
    } 
} 




import java.util.Scanner; 
import java.io.*; 

public class ChargeIt1 
{ 
    public static void main(String[] args) 
    { 
     int accountNumber; 
     Scanner keyboard = new Scanner(System.in); 



     System.out.println("Enter the file name: "); 
     String fileName1 = keyboard.nextLine(); 
     String fileName = fileName1 + ".txt"; 

     File file = new File(fileName); 

     while(!file.exists()) 
     { 
      System.out.println("the file does not exist"); 
      System.out.println("Enter the file name: "); 
      fileName1 = keyboard.nextLine(); 
      fileName = fileName1 + ".txt"; 
      file = new File(fileName); 

     } 
     System.out.println("Enter your charge account number: "); 
     accountNumber = keyboard.nextInt(); 

     //Validator1 val = new Validator1(fileName); 
     try 
     { 
      Validator1 val = new Validator1(fileName); 
      if(val.isValid(valid[], accountNumber)) 
       System.out.println("That is a valid account number."); 
      else 
       System.out.println("That is an INVALID account number."); 

     } 
     catch(Exception e) 
     { 
      //System.out.println("An error has occurred."); 
      e.printStackTrace(); 
     } 

    } 
} 
+0

생성자는 초기화되지 않은 배열을 처리합니다. – chris

+1

컴파일러는 무엇을 말합니까? 컴파일러 출력이 있습니까? – A4L

답변

2

이 줄은 잘못된 것입니다 :

int[] valid = 0; 

0 배열이 아닌 여기 내 주 뒤에 내 클래스입니다.

1

의 문제가이는 ChargeIt1 클래스에 있습니다

if(val.isValid(valid[], accountNumber)) 
    System.out.println("That is a valid account number."); 
else 
    System.out.println("That is an INVALID account number."); 

val.idValid 방법 (valid[])에 첫 번째 인수가 부정한 구문 당신입니다.

if(val.isValid(valid, accountNumber)) 

을 그리고 당신의 컴파일러 오류의주의를 기울여야한다 :이와 그 라인을 교체합니다. 빠른 메모, 이것은 IDE에서 빠르게 강조 표시 한 것입니다. 프로그래밍을 시작할 때 특히을 사용할 것을 적극 권장합니다.

0

코드에 많은 오류가 있습니다. 당신은 그것을 해결하기 위해 몇 가지 옵션이

int[] valid = 0; // does not compile 

:

그냥이 줄을 해결하기 위해

배열의 길이가 고정되며, 배열을 초기화하기 위해, 당신은 예를 들어, 차원을 제공해야합니다 :

int[] valid = new int[10]; 

그러나 배열이 고정되어 있기 때문에 코드가 배열에 비해 더 많은 입력을 읽을 수 있습니다. 또 다른 접근 방식이 있습니다. Collections를 사용하면 필요한만큼 자동으로 크기가 확장됩니다.

관련 문제