import java.util.Scanner;
class Sorting
{
static int m,n;
static int x=0;`enter code here`
static int b[]=new int[m*n];
static int a[][]=new int[m][n];
static void print()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(+a[i][j]);
}
System.out.println();
}
}
static void convertBack()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=b[x];
x++;
}
}
}
static void sort()
{
for(int i=0;i<m*n;i++)
{
for(int j=0;j<m*n;j++)
{
if(b[i]>b[j])
{
int temp=b[i];
b[i]=b[j];
b[j]=temp;
}
else
{
continue;
}
}
}
}
static void convert()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
b[x]=a[i][j];
x++;
}
}
}
static void enterArray()
{
Scanner in=new Scanner(System.in);
System.out.println("Enter the elements");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=Integer.parseInt(in.nextLine());
}
}
}
public static void main(String args[])
{
Scanner in=new Scanner(System.in);
System.out.println("Enter the number of rows");
m=Integer.parseInt(in.nextLine());
System.out.println("Enter the number of columns");
n=Integer.parseInt(in.nextLine());
enterArray();
convert();
sort();
convertBack();
print();
}
}
The above code compiles fine however on running i am getting an error as follows:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Sorting.enterArray(2dsort.java:76)
at Sorting.main(2dsort.java:87)
please help !
You are initializing your arrays before setting the values of m and n, so you get empty arrays :
static int m,n; // both are 0 by default
static int b[]=new int[m*n]; // equivalent to new int [0];
static int a[][]=new int[m][n]; // equivalent to new int [0][0];
You should create your arrays after initializing m and n :
m=Integer.parseInt(in.nextLine());
System.out.println("Enter the number of columns");
n=Integer.parseInt(in.nextLine());
b=new int[m*n];
a=new int[m][n];
...
Related
link to the problem for reference: https://www.geeksforgeeks.org/nutanix-interview-question-placement-2019-2020/
Array out-of-bounds exception at line prp[b]=s1.nextInt();
Stuck on a couple of questions with same error.
Appreciate any help.TIA
Code:
package pkg161219;
import java.util.*;
public class xD{
static Scanner s1=new Scanner(System.in);
public static void main(String[] args)
{
int x=s1.nextInt();
for(int i=0;i<x+1;i++)
{
int[] y=new int[3];
for(int a=0;a<3;a++)
{
y[i]=s1.nextInt();
}
int[] prp=new int[y[0]];
int[] prr=new int[y[1]];
int[] prs=new int[y[2]];
for(int b=0;b<y[0];b++)
{
System.out.println("Enter prices of specs of Processor");
prp[b]=s1.nextInt();
}
for(int c=0;c<y[1];c++)
{
System.out.println("Enter prices of specs of RAM");
prr[c]=s1.nextInt();
}
for(int d=0;d<y[2];d++)
{
System.out.println("Enter prices of specs of SSD");
prs[d]=s1.nextInt();
}
for(int q=0;q<y[0];q++)
{
for(int w=0;w<y[1];w++)
{
for(int e=0;e<y[2];e++)
{
if(prr[e]>=prs[w]&&prr[e]>=prp[q])
{
System.out.println(prp[q]*prr[w]+prr[w]*prs[e]);
}
}
}
}
}
}
}
for(int a = 0; a < 3; a++) {
y[i] = s1.nextInt();
}
The above is wrong. It should be y[a]
Using two for loops:
import java.util.*;
public class InsertionSort{
public static int[] doInsertionSort(int[]a){
int j=a.length;
for(int k=1;k<j;k++){
for(int i=k;i>0;i--){
if(a[i]<a[i-1]){
int temp=a[i];
a[i]=a[i-1];
a[i-1]=temp;
}
//for printing the elements while sorting..
for(int o:a)
System.out.print(o+" ");
System.out.println("");
}
}
return a;
}
public static void main(String[] args) {
int[]arr={99,77,55,33,11,88,66};
int []arra= doInsertionSort(arr);
for(int i:arra)
System.out.print(i+" ");
}
}
Using a for and while loop:
import java.util.*;
public class InsertionSortAgain{
public static void main(String[] args) {
int[]arr={99,77,55,33,11,88,66};
int n=arr.length,j;
for(int i=1;i<n;i++){
j=i-1;
int key=arr[j+1];
while(j>=0 && arr[j]>key){
arr[j+1]=arr[j];
j=j-1;
//for printing elements while sorting.....
for(int k :arr)
System.out.print(k+" ");
System.out.println(" ");
}
arr[j+1]=key;
}
for(int k :arr)
System.out.print(k+" ");
}
}
I have tried both and both do fine, but I couldn't get which is optimized.
And whether insertion sort can be implemented like this or not?
enter image description hereThe following is code for the merge sort. I am getting an error on the last line. I have also added a comment. I am unable to retrieve the array returned by the method merge_function(int[] a, int[] b). The error says " non-static method merge_sort(int[],int,int) cannot be referenced from a static context at demo1.Merge.main". Please help..!
public class Merge {
int[] merge_sort(int[] arr, int s, int e){
if(arr.length==1)
return arr;
int m=(s+e)/2;
int []a= merge_sort(arr,s,m);
int []b= merge_sort(arr,m+1,e);
int []c= merge(a,b);
print(arr);
return c;
}
public void print(int[] arr)
{
System.out.println("Elements after sorting:");
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
int[] merge(int[] a, int[] b)
{
int i=0,j=0,k=0;
int []r=new int[a.length+b.length];
while(i!=a.length && j!=b.length)
{
if(a[i]<b[j])
{
r[k]=a[i];
i++; j++; k++;
}
else if(a[i]==b[j])
{
r[k]=a[i];
i++; j++; k++;
}
else if(a[i]>b[j])
{
r[k]=b[j];
j++; k++;
}
}
return r;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Enter the length of an array.");
int n=in.nextInt();
System.out.println("Enter the numbers.");
int arr[]=new int[n];
for(int i=0;i<n;i++)
{
arr[i]=in.nextInt();
}
//error is here
int []r = merge_sort(arr,0,arr.length-1);
}
}
you cannot call non-static methods from a static context without using an instance of the class containing those methods.
I am getting these errors it's a runtime error; I have no idea why it is happening I tried to find the solution but couldn't find it.
Since I am new in java please help me to find
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 34
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:90)
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:96)
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:100)
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:100)
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:100)
at UnionAndIntersection.BinarySearch(UnionAndIntersection.java:100)
at UnionAndIntersection.Union(UnionAndIntersection.java:53)
at UnionAndIntersection.main(UnionAndIntersection.java:26)
please help me to fix this
import java.util.Scanner;
import java.util.Arrays;
class UnionAndIntersection {
public static void main(String args[]) throws Exception {
int arr1[]=new int[20];
int arr2[]=new int[20];
int m,n,i,j;
Scanner sc=new Scanner(System.in);
System.out.println("Enter no of elements in first array");
m=sc.nextInt();
System.out.println("Enter no of element of second Array");
n=sc.nextInt();
System.out.println("Enter Elements in 1st Array");
for(i=0;i<m;i++) {
arr1[i]=sc.nextInt();
}
System.out.println("Enter Elements in 2nd Array");
for(j=0;j<n;j++) {
arr2[j]=sc.nextInt();
}
UnionAndIntersection ui=new UnionAndIntersection();
ui.Union(arr1,arr2,m,n);
ui.Intersection(arr1,arr2,m,n);
}
void Union(int arr1[],int arr2[],int m,int n) {
if(m>n) {
int tempa[]=arr1;
arr1=arr2;
arr2=tempa;
int temp=m;
m=n;
n=temp;
}
Arrays.sort(arr1);
for(int i=0;i<m;i++)
{
System.out.println(arr1[i]+"");
}
for(int i=0;i<2;i++)
{
if(BinarySearch(arr1,0,m-1,arr2[i])== -1)
System.out.println(arr2[i]+"");
}
}
void Intersection(int arr1[],int arr2[],int m,int n)
{
if(m>n)
{
int tempa[]=arr1;
arr1=arr2;
arr2=tempa;
int temp=m;
m=n;
n=temp;
}
Arrays.sort(arr1);
for(int i=0;i<m;i++)
{
System.out.println(arr1[i]+"");
}
for(int i=0;i<2;i++)
{
if(BinarySearch(arr1,0,m-1,arr2[i])!= -1)
System.out.println(arr2[i]+"");
}
}
int BinarySearch(int arr[],int l,int h,int x)
{
if(h>=1)
{
int mid=l+h-1/2;
if(arr[mid]==x)
{
return mid;
}
else if(arr[mid]>x)
{
return BinarySearch(arr,l,mid-1,x);
}
else{
return BinarySearch(arr,mid+1,h,x);
}
}
return -1;
}
}
You set the size of the array to 20, not to the user input. If the user puts in a number larger than 20, you get the error.
So change:
int arr1[]=new int[20];
int arr2[]=new int[20];
to
int arr1[]=new int[m];
int arr2[]=new int[n];
I have written a code in java for quicksort while considering the first element as pivot. The code is giving an ArrayOutOfBoundsException if I consider the first element as the largest element of the array. While the logic is running perfectly when implemented the same logic in C++.
import java.util.Scanner;
class QSort
{
private int n;
private int a[] = new int[n];
public QSort(int[] x)
{
n = x.length;
a = x;
}
private int qs(int low,int up)
{
int pivot = a[low];
int p = low+1,q = up;
while(q>=p)
{
while(pivot>=a[p])
p++;
while(pivot<a[q])
q--;
if(q>p)
{
a[p]=a[p]+a[q]-(a[q]=a[p]); //swapping(a[p],a[q])
p++;
q--;
}
}
a[low]=a[low]+a[q]-(a[q]=a[low]); //swapping(a[low],a[q])
return q;
}
public void quicksort(int low,int up)
{
if(low<up)
{
int i = qs(low,up);
quicksort(low,i-1);
quicksort(i+1,up);
}
}
public void print()
{
System.out.println("\nThe sorted array is :");
for(int i=0; i<a.length; i++)
{
System.out.println(a[i]);
}
}
}
class Quick
{
public static void main(String args[])
{
System.out.print("\nEnter the no. of values : ");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x[] = new int[n];
System.out.println("\nEnter the elements :");
for(int i=0; i<n; i++)
x[i] = sc.nextInt();
QSort s = new QSort(x);
s.quicksort(0,n-1);
s.print();
}
}