Программа ввода / вывода Java, работающая с файлами

#java #file #oop #input #output

#java #файл #ооп #ввод #вывод

Вопрос:

Итак, вот код, который считывает входные данные из файла

date.in.txt

Затем шифрует, выполняя операцию XOR между символом k из текста, прочитанного из файла, и символом (k%n) из ключа, где — длина ключа. Затем он выводит его в

date.out.txt

Во второй части он делает обратное, расшифровывает текст из

date.out.txt

и выводит его в

date.in.txt

Вот пример первой части:

date.in : Привет, Мир! Как дела?

date.out: 43 4 5 2 10 67 54 6 28 9 7 64 73 100 45 12 22 73 15 23 6 65 16 1 16 92

И вот один для обратного:

date.out.txt: 43 4 5 2 10 67 54 6 28 9 7 64 73 100 45 12 22 73 15 23 6 65 16 1 16 92

date.in.txt : Привет, Мир! Как дела?

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws FileNotFoundException 
        {Scanner scan=new Scanner(System.in);
        
        
        File file = new File("date.in.txt");
        File file2 = new File("date.out.txt");
        
        
        String [] s= new String[100];
        String S= new String();
        for(int i=0;i<100;i  )
            s[i]=new String();
        int nr=0;
        
        
        int vec[]=new int[100];
        int nrvec=0;
        
        
        String cuv;
        System.out.print("Enter key: ");
        cuv=scan.nextLine();
        System.out.print("n");
        int n=cuv.length();
        
        
        try 
            { Scanner input = new Scanner( file );
                while(input.hasNextLine())
                    { s[nr  ]=input.nextLine();
                    s[nr  ]="n";} }
        
        catch (FileNotFoundException ex) 
            { System.out.printf("ERROR: %s!n", ex); }
        
        
        for(int i=0;i<nr;i  )
            for(int j=0;j<s[i].length();j  )
                { vec[nrvec  ]=s[i].codePointAt(j); }
        
        
        for(int i=0;i<nrvec;i  )
            { int d=cuv.codePointAt(i%n);
            vec[i]=vec[i] ^ d; }
            
        
        nrvec--;
      
        
         try 
            { PrintWriter output = new PrintWriter(file2);
            for(int i=0;i<nrvec;i  )
                output.print(vec[i] " ");
            output.close(); } 
    
         catch (IOException ex) 
            { System.out.printf("ERROR: %s!n", ex); }
        
        
         int ok=1; // SECOND PART
         if(ok==1)
            {System.out.print("Enter key: ");
            cuv=scan.nextLine();
            System.out.print("n");
            n=cuv.length();
            
            File file3 = new File("date.out.txt");
            File file4 = new File("date.in.txt");
            
            nrvec=0;
            
            try 
                { Scanner input = new Scanner( file3 );
                    while(input.hasNext())
                        { vec[nrvec  ]=input.nextInt(); } }
                        
            catch (FileNotFoundException ex) 
                { System.out.printf("ERROR: %s!n", ex); }
         
            int e;
            try 
                { PrintWriter output = new PrintWriter(file4);
                for(int i=0;i<nrvec;i  )
                    { e=cuv.codePointAt(i%n);
                    output.print(vec[i]^e  " ");}  // 93
                output.close(); } 
    
            catch (IOException ex) 
                { System.out.printf("ERROR: %s!n", ex); }
         
        
            }}}
                
  

Проблема в том, что я получаю сообщение об ошибке в строке 93, в котором говорится:

Исключение в потоке «main» java.lang.Ошибка: неразрешенная проблема компиляции: оператор ^ не определен для типа (ов) аргумента int, String

в Main.main(Main.java:93)

И я не знаю, почему это так.

Ответ №1:

Запишите эту строку как

  output.print((vec[i]^e)  " ");}  // 93
  

Обратите внимание на круглые скобки. Без них исходный код фактически обрабатывается как

  output.print(vec[i]^ (e  " "));}  // 93
  

поскольку оператор » » имеет более высокий приоритет, чем «^».

Ответ №2:

Просто измените строку в 93 на:

output.print((vec[i]^e) » «);}

Проблема, с которой вы столкнулись, заключалась в приоритете.