这是我的代码
import java.io.*;
import java.util.*;
import java.util.Scanner;
import java.io.PrintWriter;
public class EncryptionDecryption {
public static void main(String[] args) throws java.io.IOException{
int z = getRandom();
boolean luck = true;
while(luck == true){
String codeString = getString();
System.out.println(codeString);
char[] enCharArray = encrypt(codeString, z);
String encryptedString = new String(enCharArray);
System.out.println(encryptedString);
char[] deCharArray = decrypt(encryptedString, z);
String decryptedString = new String(deCharArray);
System.out.println(decryptedString);
putString(encryptedString);
if(codeString.length() == 0)
luck = false;
}
}
static String getString(){
Scanner input = new Scanner(new File(" "));
String codeString = input.next();
return codeString;
}
static void putString (String finalString){
PrintWriter work = new PrintWriter("EncryptedDocument.txt");
work.print(finalString + " ");
work.close();
}
static char[] encrypt(String encryptString, int z){
char[] codeChar = encryptString.toCharArray();
char[] enCharArray;
enCharArray = new char[codeChar.length];
for(int i = 0; i < codeChar.length; i++){
int x = codeChar[i];
int enInt = encryptChar(x, z);
char enChar = (char)enInt;
enCharArray[i] = enChar;
if(x == 32){
enInt = 32;
enChar = (char)enInt;
enCharArray[i] = enChar;
}
}
return enCharArray;
}
static char[] decrypt(String decryptString, int z){
char[] deCodeChar = decryptString.toCharArray();
char[] deCharArray;
deCharArray = new char[deCodeChar.length];
for(int i = 0; i < deCodeChar.length; i++){
int x = deCodeChar[i];
int deInt = decryptChar(x, z);
char deChar = (char)deInt;
deCharArray[i] = deChar;
if(x == 32){
deInt = 32;
deChar = (char)deInt;
deCharArray[i] = deChar;
}
}
return deCharArray;
}
static int encryptChar(int x, int z){
int y = 'A';
int enInt = (x - y + z) % 26 + y;
return enInt;
}
static int decryptChar(int x, int z){
int y = 'A';
int deInt = (x - y + 104 - z) % 26 + y;
return deInt;
}
static int getRandom(){
int encryptMethod = 0;
while(encryptMethod == 0){
Random encrypt = new Random();
encryptMethod = encrypt.nextInt(96);
}
return encryptMethod;
}
}
我在尝试编译时不断收到这些错误:
EncryptionDecryption.java:32: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
Scanner input = new Scanner(new File(" "));
^
EncryptionDecryption.java:38: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
PrintWriter work = new PrintWriter("EncryptedDocument.txt");
^
2 errors
答案 0 :(得分:3)
因为你调用一个方法来声明它抛出一个FileNotFoundException,并且你没有捕获异常,也没有声明封闭方法抛出它。这在Java中是不允许的。必须捕获所有已检查的异常,或者在方法的throws
子句中声明:
static String getString() throws FileNotFoundException {
如果您可以处理异常并执行一些有意义的操作,使程序继续按预期工作,那么请捕获异常。如果你不能在这个方法中处理它,那么让你的方法的调用者为你处理它,并通过在throws子句中声明它来传播它。
答案 1 :(得分:1)
在方法getString()
中您正在创建一个new File()
,它会抛出FileNotFoundException
。必须通过将扫描器代码块包含在FileNotFoundException
块中或由方法抛出的声明来捕获此try-catch
。同样的事情适用于putString (String finalString)
方法。
您的代码应为
static String getString(){
Scanner input;
try {
input = new Scanner(new File(" "));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String codeString = input.next();
return codeString;
}
static void putString (String finalString){
PrintWriter work;
try {
work = new PrintWriter("EncryptedDocument.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
work.print(finalString + " ");
work.close();
}
答案 2 :(得分:0)
注意你有......
public static void main(String[] args) throws java.io.IOException
在那里“投掷”线?这是告诉Java当IOException
发生时,它应该传递给任何名为main()
的东西。
Java要求您针对可能引发的任何可能异常执行此操作。这些错误消息告诉您的是,您的代码中可能会引发另外两种类型的异常;您需要指定它们被抛出(或通过try
/ catch
块自行处理它们。)
答案 3 :(得分:0)
尝试添加
throws java.io.IOException
任何使用文件IO的方法。我认为它会解决你的问题
答案 4 :(得分:0)
因为FileNotFoundException
是checked Exception,这意味着在Java中你必须在它们发生时对它们做些什么。
您有两种方法可以处理已检查的例外:
抓住他们并与他们合作try{
} catch(FileNotFoundException e) { //do something with e}
重新抛出它们,这意味着添加行throws FileNotFoundException
添加方法签名的结尾
答案 5 :(得分:0)
在上面的代码中Scanner input = new Scanner(new File(" "));
表示您正在尝试打开一个文件。当您尝试打开它时,这可能会也可能不可用。如果在该处不可用,则抛出异常time.Hence总是建议相应地处理这个代码。
must be caught or declared to be thrown
表示我们可能期望上面解释的异常可以被代码抛出,因此必须处理。异常处理使用
1.使用try catch
try{
ur code that generates exception
}
catch{
handle exception
}
这说明了first part of the exception you got "must be caught"
2.use throw
当你不想在这里处理异常时,可以将它抛给调用它的方法。调用方法必须处理这个异常。
meth1()
{
meth2();
}
meth2()throws Exception
{
try{
.....
.....
}
catch(Exception e)
{
...
u will not handle it here;
throw e; //exception thrown to the calling method meth1()
}
}
这说明了
second part of the exception "declared to be thrown"