#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) » «);}
Проблема, с которой вы столкнулись, заключалась в приоритете.