2013-11-21 3 views
0

В настоящее время я пытаюсь сделать свой код для вывода выходного файла с помощью метода PrintStream. МОЯ учебник предполагает, что я использую эту конкретную строку кода в мой основной:Ошибка PrintStream в основном «переменном выходе уже определена в основном»

PrintStream output = new PrintStream(new File("results.txt")); 

Однако, когда я печатаю эту строку кода, Java дает мне следующую ошибку:

Personality.java:17: error: variable output is already defined in method main(String[]) 
    PrintStream output = new PrintStream(new File("results.txt")); 
       ^
    Personality.java:23: error: cannot find symbol 
     output.println(); 
      ^

Мой главный метод в настоящее время выглядит следующим образом:

public class Personality { 
public static void main (String[] args) throws FileNotFoundException { 
    Scanner input = new Scanner(System.in); 
    intro(); 
    Scanner output = asksForFile(input); 
    PrintStream output = new PrintStream(new File("results.txt")); 
    while(output.hasNextLine()){ 
     int[] aCounts = new int[4]; 
     int[] bCounts = new int[4]; 
     String name = output.nextLine(); 
     String data = output.nextLine(); 
     output.println(); 
     System.out.print(name + ": "); 
     int[] percentB = numberOfAnswers(name, data, aCounts, bCounts); 
     output.print(Arrays.toString(percentB)); 
    output.print(" = "); 
     output.println(determineType(percentB));  
    }  
} 

Я предполагаю, что из ошибок, что я не могу иметь выход, определенный дважды в одном методе, но если я не определить мой выход, как будет моя программа знает, что что сим бол есть? Кроме того, если у меня уже есть выход, определяющий внутри main, что еще я могу назвать его, чтобы заставить PrintStream работать, а также сохранить остальную часть программы?

я переименовал переменные «выход» в моей основной для сканера, но вместо этого я получаю эту новую ошибку:

Personality.java:34: error: cannot find symbol 
    output.println("This program processes a file of answers to the"); 
    ^
     symbol: variable output 
    location: class Personality 

Это то, что весь мой код выглядит на данный момент:

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

public class Personality { 
    public static void main (String[] args) throws FileNotFoundException { 
     Scanner input = new Scanner(System.in); 
     intro(); 
     Scanner scanner = asksForFile(input); 
     PrintStream output = new PrintStream(new File("results.txt")); 

     while(scanner.hasNextLine()){ 
      int[] aCounts = new int[4]; 
      int[] bCounts = new int[4]; 
      String name = scanner.nextLine(); 
      String data = scanner.nextLine(); 
      output.println(); 
      System.out.print(name + ": "); 
      int[] percentB = numberOfAnswers(name, data, aCounts, bCounts); 
      output.print(Arrays.toString(percentB)); 
     output.print(" = "); 
      output.println(determineType(percentB));  
     }  
    } 

    //Introduces the program 
    public static void intro() { 
     output.println("This program processes a file of answers to the"); 
     output.println("Keirsey Temperament Sorter. It converts the"); 
     output.println("various A and B answers for each person into"); 
     output.println("a sequence of B-percentages and then into a"); 
     output.println("four-letter personality type."); 
     output.println();  
    } 

    //Asks for input file 
    public static Scanner asksForFile(Scanner input) throws FileNotFoundException { 
     output.print("input file name? "); 
     String filename = input.nextLine(); 
     return new Scanner(new File(filename)); 

    } 

    //This while loop puts counts inside arrays 
    public static int[] numberOfAnswers(String name, String data, int[] aCounts, int[] bCounts) throws FileNotFoundException { 
     data = data.toLowerCase(); 
     for (int i = 0; i < data.length(); i++) { 
      int x = ((i % 7) + 1)/2; 
      if (data.charAt(i) == 'a'){ 
       aCounts[x]++; 
      } else if(data.charAt(i) == 'b'){ 
       bCounts[x]++; 
      } 
     } 
     return percentB(aCounts, bCounts); 
    } 

    public static void printOutcome(int[] aCounts, int[] bCounts){ 
     String[] ratios = new String[4]; 
     for(int i = 0; i < 4; i++){ 
      String temp = aCounts[i] + "A-" + bCounts[i] + "B"; 
      ratios[i] = temp; 
     } 
     output.println(Arrays.toString(ratios)); 
    } 

    public static int[] percentB(int[] aCounts, int[] bCounts){ 
     int[] percentB = new int[4]; 
     for(int i = 0; i < 4; i++){ 
      double percent = (double) bCounts[i]/(aCounts[i] + bCounts[i]); 
      percentB[i] = (int) Math.round(percent * 100); 
     } 
     return percentB;  
    } 

    public static String determineType(int[] percentB){ 
     String sub50 = "ESTJ"; 
     String sup50 = "INFP"; 
     String type = ""; 
     for(int i = 0; i < 4; i++){ 
      if(percentB[i] > 50){ 
       type += sup50.charAt(i); 
      } else if(percentB[i] < 50){ 
       type += sub50.charAt(i); 
      } else { 
       type += "X"; 
      } 
     } 
     return type; 
    } 

}

+0

Уход: Java не относится к JavaScript. – user2864740

+0

Извините! Я все еще получаю ошибки в своем коде! Вы знаете, почему? – user3015607

+0

Обратите внимание на сообщения об ошибках - они верны. В настоящее время форма не работает, потому что 'PrintStream output 'является локальной переменной * в методе' main' и, следовательно, [символ, предназначенный для ссылки на переменную] * не может быть найден * в методе 'intro' , – user2864740

ответ

0

код имеет две переменные с тем же именем, что не допускается. Изменение одного из этих имен переменных и реорганизовать код:

Scanner output = asksForFile(input); 
PrintStream output = new PrintStream(new File("results.txt")); 

переработан версия

public class Personality { 
    public static void main (String[] args) throws FileNotFoundException { 
     Scanner input = new Scanner(System.in); 
     intro(); 
     Scanner scanner = asksForFile(input); 
     PrintStream output = new PrintStream(new File("results.txt")); 

     while(scanner.hasNextLine()){ 
      int[] aCounts = new int[4]; 
      int[] bCounts = new int[4]; 
      String name = scanner.nextLine(); 
      String data = scanner.nextLine(); 
      output.println(); 
      System.out.print(name + ": "); 
      int[] percentB = numberOfAnswers(name, data, aCounts, bCounts); 
      output.print(Arrays.toString(percentB)); 
      output.print(" = "); 
      output.println(determineType(percentB));  
     }  
    } 
} 

ПРИМЕЧАНИЕ Есть несколько методов, в этом фрагменте кода, для которого источник не предусмотрен. Эта версия может потребовать дополнительного рефакторинга с учетом этих неизвестных.

+0

Я реорганизовал код, как вы сказали, но я все еще получаю ошибки! Я отредактировал главный вопрос, чтобы показать, какие ошибки я получаю. – user3015607

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

  • Нет связанных вопросов^_^