执行以下代码进行双重转置加密和解密时遇到问题。
import java.io.*;
import java.util.*;
public class HelloWorld
{
public static void main(String[] args)
{
NewEncryptAndDecrypt ned=new NewEncryptAndDecrypt();
ned.input();
}
}
class NewEncryptAndDecrypt
{
Scanner sc=new Scanner(System.in);
void input()
{
int ch;
do
{
System.out.println("\n\t\t*****ENTER*****");
System.out.println("\t1.Encrypt");
System.out.println("\t2.Decrypt");
System.out.println("\t0.Exit");
ch=sc.nextInt();
switch(ch)
{
case 1:
{
encrypt();
break;
}
case 2:
{
decrypt();
break;
}
}
}while(ch!=0);
}
void encrypt()
{
//String ip,t;
char text[][],enc[][];
int key,i,j,row[],col[],r,c;
int k=0,m,n;
System.out.print("Enter The Plain Text ");
StringBuilder ip = new StringBuilder(sc.next());
StringBuilder t = new StringBuilder(sc.nextLine());
// ip=sc.next();
// t=sc.nextLine();
System.out.print("Enter The Number Of Rows ");
r=sc.nextInt();
System.out.print("Enter The Number Of Columns ");
c=sc.nextInt();
text=new char[r][c];
enc=new char[r][c];
row=new int[r];
col=new int[c];
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
text[i][j]=ip.charAt(k);
k++;
}
}
System.out.println("Enter The Row Key ");
for(i=0;i<r;i++)
row[i]=(sc.nextInt()-1);
System.out.println("Enter The Column Key ");
for(i=0;i<c;i++)
col[i]=(sc.nextInt()-1);
k=0;
System.out.print("The Cipher Text Is ");
for(i=0;i<r;i++)
{
m=row[i];
for(j=0;j<c;j++)
{
n=col[j];
enc[i][j]=text[m][n];
System.out.print(""+Character.toUpperCase(enc[i][j]));
}
}
}
void decrypt()
{
String ip,t;
char text[][],enc[][];
int key,i,j,row[],col[],r,c;
int k=0,m,n;
System.out.print("Enter The Cipher Text ");
ip=sc.next();
t=sc.nextLine();
System.out.print("Enter The Number Of Rows ");
r=sc.nextInt();
System.out.print("Enter The Number Of Columns ");
c=sc.nextInt();
text=new char[r][c];
enc=new char[r][c];
row=new int[r];
col=new int[c];
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
text[i][j]=ip.charAt(k);
k++;
}
}
System.out.println("Enter The Row Key ");
for(i=0;i<r;i++)
row[i]=(sc.nextInt()-1);
System.out.println("Enter The Column Key ");
for(i=0;i<c;i++)
col[i]=(sc.nextInt()-1);
k=0;
for(i=0;i<r;i++)
{
m=row[i];
for(j=0;j<c;j++)
{
n=col[j];
enc[m][n]=text[i][j];
}
}
System.out.print("The Retrieved Plain Text Is ");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
System.out.print(""+Character.toLowerCase(enc[i][j]));
}
}
}
}
我从调用input的函数input()中收到错误,然后调用了scan.nextInt()
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at NewEncryptAndDecrypt.input(HelloWorld.java:33)
at HelloWorld.main(HelloWorld.java:17)
这是怎么了?我怀疑这是Scanner.nextInt()或此处带有缓冲区的问题的原因,但是我真的不明白我在Internet上所读到的内容。
答案 0 :(得分:-1)
NoSuchElementException
。
在将值分配给变量之前,应使用hasNextInt()
。
if(sc.hasNextInt()){
ch=sc.nextInt();
}