Reputation: 101
I've got the problem executing the following code for double transposition encryption and decryption.
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]));
}
}
}
}
I receive the error from the function input() where I call scanner.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)
What is wrong here? I'm doubt that's the problem with the scanner.nextInt() or something with the buffer here but I really don't understand from what I was reading on the Internet.
Upvotes: 0
Views: 1198
Reputation: 404
NoSuchElementException
will be thrown if no more tokens are available.
You should use hasNextInt()
before assigning value to variable.
if(sc.hasNextInt()){
ch=sc.nextInt();
}
Upvotes: 1