I have been struggling with the following problem:
I am trying to print the below output using nested for loops and two dimensional arrays.
int[][] outputArray = {
{1,2,3,4,5,6,7,8,9,10},
{11,12,13,14,15,16,17,18,19,20},
{21,22,23,24,25,26,27,28,29,30},
{31,32,33,34,35,36,37,38,39,40},
{41,42,43,44,45,46,47,48,49,50},
{51,52,53,54,55,56,57,58,59,60},
{61,62,63,64,65,66,67,68,69,70},
{71,72,73,74,75,76,77,78,79,80}
};
Here is my code for the array which seems to be correct:
public ExerciseTwo() {
myArray1 = new int[8][10];
for (int i = 0; i < myArray1.length; i++) {
for (int j = 0; j < myArray1[i].length; j++) {
myArray1[i][j] = (i * myArray1[i].length) + j + 1;
}// end inner loop
}// end outer loop
}// end constructor
Now I am having several issues with the nested loop below:
public void printArrayStatement() {
System.out.print("int[][] outputArray = {");
for (int i = 0; i < myArray1.length; i++) {
if (myArray1.length >= 1)
// I am trying to remove the initial comma here but my
// logic is wrong. It is printing 1 first on each line.
System.out.print("\n" + "{" + myArray1[0][0]);
for (int j = 0; j < myArray1[i].length; j++) {
System.out.print("," + myArray1[i][j]);
}
}
System.out.println("};");
}// end method
I also can't seem to figure out how to get the }, at the end of each line. I think an if statement is necessary but I can't figure out the code!
The following code is working as required:
System.out.println("int[][] outputArray = {"); //int[][] outputArray = {
for (int i = 0; i < myArray1.length; i++) {
System.out.print("{"); //{
int j;
for (j = 0; j < myArray1[i].length - 1; j++) {
//1, 2,...9, i.e not last one.
System.out.print(myArray1[i][j] + ", "); //1, 2,...9, then terminate
// Not used if to check for last one
// because it would increase time complexity
}
System.out.print(myArray1[i][j] + "}"); //10}
if (i != myArray1.length - 1) {
System.out.println(", "); //, only if it is not last one
}
}
System.out.println("\n}");
Output:
int[][] outputArray = {
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
{31, 32, 33, 34, 35, 36, 37, 38, 39, 40},
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50},
{51, 52, 53, 54, 55, 56, 57, 58, 59, 60},
{61, 62, 63, 64, 65, 66, 67, 68, 69, 70},
{71, 72, 73, 74, 75, 76, 77, 78, 79, 80}
}
It looks like you're creating a complex bit of code that can be solved simply... print the comma if you're not at the end, and don't print it if you're at the end
for (int i = 0; i < myArray1.length; i++) {
for (int j = 0; j < myArray1[i].length; j++) {
// here print out myArray1[i][j]
if (j != myArray1[i].length - 1) {
// here print out comma if j is not == myArray1[i].length - 1
}
}
System.out.println();
}
Another option is to use java.util.Arrays.toString(...)
I'm not sure why you are trying to print the { and } symbols. Are you sure that you need them?
Your inner loop is starting from zero:
for (int j = 0; j < myArray1[i].length; j++) {
You should have
for (int j = 1; j < myArray1[i].length; j++) {
As for the closing brace, just print it after the inner loop, but still inside the outer loop:
System.out.println("}");
}
System.out.println("};");
After the inner loop we print '}' and we check to see if it just printed the last line, if not then we need to print comma also.
Here is the code:
for (int i = 0; i < myArray1.length; i++) {
if (myArray1.length >= 1)
System.out.print("\n" + "{" + myArray1[0][0]);
for (int j = 0; j < myArray1[i].length; j++) {
System.out.print("," + myArray1[i][j]);
}
// Print ',' if we are not at the end.
System.out.print("}"+(i==myArray1.length-1?"":","));
}
System.out.println("\n};");
Related
I have recently started to learn java. I have a task, where I have to print a number grid with specific values in it.
Heres the code:
public static void main(String[] args) {
int array[][] = {{1, 2, 3, 5, 7},
{10, 11, 12, 14, 16},
{19, 20, 21, 23, 25},
{28, 29, 30, 32, 34},
{37, 38, 39, 41, 43},
{46, 47, 48, 50, 52}};
for (int i = 0; i < array.length; i++){
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println("");
}
}
}
Now it works perfectly fine, but ideally I could only declare values of the first row and use for loop with if statement to accomplish the same thing, yet I struggle to figure out code for that.
The difference between the two elements in a column is 9: a[i][j] = a[i-1][j] + 9, thus the code may be modified as:
public static void main(String args[]) {
int array[][] = new int[6][5];
// initialize the first row
array[0] = new int[] {1, 2, 3, 5, 7};
// print the first row
System.out.println(Arrays.toString(array[0]));
for (int i = 1; i < array.length; i++) {
// populate current row incrementing each element by 9
for (int j = 0; j < array[i].length; j++) {
array[i][j] = array[i - 1][j] + 9;
}
System.out.println(Arrays.toString(array[i]));
}
}
Output:
[1, 2, 3, 5, 7]
[10, 11, 12, 14, 16]
[19, 20, 21, 23, 25]
[28, 29, 30, 32, 34]
[37, 38, 39, 41, 43]
[46, 47, 48, 50, 52]
Update
It would be more interesting task to generate the sequence starting from 1.
Inside the row the differences between two adjacent elements change like 1, 1, 2, 2, 3, and 3 is the difference between the last element of the previous row and the first element in the next row.
int x = 1;
for (int i = 1; i < 7; i++) {
for (int j = 1; j < 6; j++) {
System.out.print(x + " ");
x += j / 2 + j % 2;
}
System.out.println();
}
here fundememtal,database are two subjects. same element's on both
arrays are for the same student. ( fundemental[0],database[0]--> this
is for the student 1 ) . i need to find highest(high rank) to lowest
rank students from this program.i declare a sort method and pass the
total array and create that array total as ascending.just check it out my attachment photo.
i need to find this rank
here is my code.if anybody have unclear, please ask me.
import java.util.*;
class Remove{
public static void main(String args[]){
int [] fundemental={54,34,35,65,87,37};
int database[]={67,56,45,57,78,89};
int[] total=new int[database.length];
for (int i = 0; i < database.length; i++){
total[i]=fundemental[i]+database[i];
}
int [] arrayTot=sort(total);
int index=0;
for (int i = 0; i < total.length; i++){
for (int j = 0; j < total.length; j++){
if(total[i]==(fundemental[j]+database[j]))
index=i;
}
}
}
public static int[] sort(int[]total){
for (int i = total.length; i >0; i--){
int min=total[0];
int index=0;
for (int j =1; j < i; j++)
{
if(total[j]<min){
min=total[j];
index=j;
}
}
total[index]=total[i-1];
total[i-1]=min;
}
return total;
}
}
if anybody has an another idea for find highest rank to lower rand from
student's two subject, please code me.
You can use insertion sort to the small array size and swap all arrays
public static void main(String[] args) {
int[] fundamentals = { 54, 34, 35, 65, 87, 37 };
int database[] = { 67, 56, 45, 57, 78, 89 };
int len = database.length;
int[] total = new int[len];
for (int i = 0; i < len; i++) {
total[i] = fundamentals[i] + database[i];
}
for (int i = 1; i < len; i++) {
for (int j = i; j > 0 && total[j] > total[j - 1]; j--) {
swap(total, fundamentals, database, j, j - 1);
}
}
}
static void swap(int[] total, int[] fundamentals, int[] database, int i, int j) {
int temp = total[j];
total[j] = total[i];
total[i] = temp;
temp = fundamentals[j];
fundamentals[j] = fundamentals[i];
fundamentals[i] = temp;
temp = database[i - 1];
database[i - 1] = database[i];
database[i] = temp;
}
, output
[165, 126, 122, 121, 90, 80]
[87, 37, 65, 54, 34, 35]
[78, 89, 57, 67, 56, 45]
I have to output the array with a maximum of 4 array values per line, but I can't figure out how to convert it to a 2 dimensional array. After the dashes is where I am having trouble. If I don't output it as a 2D array, how else would I restrict it to have only 4 values per line?
public class arrayExampleB{
public static void main(String[] args){
int[] x = {22, 12, 28, 4, 30, 59, 17, 82, 1, 99, 47, 2, 8, 20, 80};
System.out.print("Pre-Swapped Array Set (linear): {");
for(int i=0; i<=x.length-1; i++){
if(i<x.length-1){
System.out.print(x[i] + ", ");
}
else{System.out.print(x[i]);}
}
System.out.print("}");
int y = x.length-1;
int temp = x[y];
x[y] = x[1];
x[1] = temp;
int z = x.length-2;
int temp2 = x[z];
x[z] = x[0];
x[0] = temp2;
System.out.print("\nPost-Swapped Array Set (linear): {");
for(int i=0; i<=x.length-1; i++){
if(i<x.length-1){
System.out.print(x[i] + ", ");
}
else{System.out.print(x[i]);}
}
System.out.print("}");
//-------------------------------------------------------------
int d = (x.length / 4) + (x.length % 4);
int i = 0;
int j = 0;
int[][] t = new int[i][j];
System.out.print("\nPre-Swapped Array Set (2D): {");
for(i=0; i <= 4; i++){
for(j=0; j < d; j++){
System.out.print(t[i][j] + " ");
}
System.out.println();
}
System.out.print("}");
}
}
To output a 1d array as 2d with a max of 4 values on a line, use this code:
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
if ((i+1) % 4 == 0)
System.out.println();
}
int[] x = {22, 12, 28, 4, 30, 59, 17, 82, 1, 99, 47, 2, 8, 20, 80};
int[][] t = new int[4][4];
// populate 2D
int k = 0
for(i=0; i <= t.length; i++){
for(j=0; j < t[i].length; j++){
t[i][j] = x[k];
k++l
}
}
// print
for(i=0; i <= t.length; i++){
System.out.print("{");
for(j=0; j < t[i].length; j++){
System.out.print(t[i][j]);
}
System.out.println("}");
}
Without taking too close a look on your code: To output a one dimensional array on several lines on the console consider this:
int[] x = {22, 12, 28, 4, 30, 59, 17, 82, 1, 99, 47, 2, 8, 20, 80};
for(int i = 0; i < x.length; i++)
{
System.out.print(x[i] + ' ');
if( (i+1) % 4 == 0)
System.out.print('\n');
}
I found this snippet online that made a array_intersect like function in java using integer.
Sample:
int[] intersect(int[] arr1, int[] arr2) {
int count = 0;
for(int a = 0; a < arr1.length; a++) {
for(int b = 0; b < arr2.length; b++) {
if(arr1[a] == arr2[b]) {
count++;
break;
}
}
}
int[] result = new int[count];
count = 0;
for(int a = 0; a < arr1.length; a++) {
for(int b = 0; b < arr2.length; b++) {
if(arr1[a] == arr2[b]) {
result[count++] = arr1[a];
break;
}
}
}
return result;
}
int[] arr1 = new int[] {10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
95, 85, 75, 65, 55, 45, 35, 25, 15, 05,
10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
int[] arr2 = new int[] {15, 25, 35, 45, 55,
12, 22, 32, 43, 52,
15, 25, 35, 45, 55};
int[] p1 = this.unique(arr1);
int[] p2 = this.unique(arr2);
int[] intersectResults = this.intersect(arr1, arr2);
for(int a = 0; a < intersectResults.length; a++) {
System.out.print(intersectResults[a] + " ");
}
But when i changed it to:
String[] intersect(String[] a_yourname, String[] a_crushname) {
int count = 0;
for(int a = 0; a < a_yourname.length; a++) {
for(int b = 0; b < a_crushname.length; b++) {
if(a_yourname[a] == a_crushname[b]) {
count++;
break;
}
}
}
String[] result = new String[count];
count = 0;
for(int a = 0; a < a_yourname.length; a++) {
for(int b = 0; b < a_crushname.length; b++) {
if(a_yourname[a] == a_crushname[b]) {
result[count++] = a_yourname[a];
break;
}
}
}
return result;
}
String[] flames = this.intersect(a_yourname, a_crushname);
//String[] p23 = this.unique(arr2);
System.out.println("heheh" +flames.length);
for(int a = 0; a < flames.length; a++) {
System.out.print(flames[a] + " ");
}
Can someone explain to me what I did wrong here? I'm really not familiar with Java.
a_yourname and a_crushname are both string arrays.
Code:
String[] a = new String[] { "aa", "bb", "cc" };
String[] b = new String[] { "bb", "cc", "dd" };
Set<String> setA = new HashSet<String>(Arrays.asList(a));
List<String> listB = Arrays.asList(b);
setA.retainAll(listB);
System.out.println(setA);
You can see the results here:
http://ideone.com/tKg5xa
If you really want the result as an array:
String[] out = setA.toArray(new String[setA.size()]);
Again there's no need to use an array if all you want is to iterate through the result. Google "Java for each" or pick up a Java book.
What I'm trying to do is print the largest number within a two dimensional array and it's index location. I'm able to find the largest number, but I can't seem to figure out how to print it's index location. Anyway, here's what I have so far:
public static void main(String[] args) {
int[][] arr = {{4, 44, 5, 7, 63, 1}, {7, 88, 31, 95, 9, 6}, {88, 99, 6, 5, 77, 4}};
double max = arr[0][0];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
}
}
}
System.out.println(max);
System.out.println(i + j); //No idea what I should be doing here, just trying out everything I can think of
Right now, you should consistently get 2 * arr.length as the final value. That isn't what you are probably looking for. It looks like you want to know the coordinates for the max value. To do this, you'll need to cache the values of the indexes and then use them later:
public static void main(String[] args) {
int[][] arr = {{4, 44, 5, 7, 63, 1}, {7, 88, 31, 95, 9, 6}, {88, 99, 6, 5, 77, 4}};
int tmpI = 0;
int tmpJ = 0;
double max = arr[0][0];
// there are some changes here. in addition to the caching
for (int i = 0; i < arr.length; i++) {
int[] inner = arr[i];
// caches inner variable so that it does not have to be looked up
// as often, and it also tests based on the inner loop's length in
// case the inner loop has a different length from the outer loop.
for (int j = 0; j < inner.length; j++) {
if (inner[j] > max) {
max = inner[j];
// store the coordinates of max
tmpI = i; tmpJ = j;
}
}
}
System.out.println(max);
// convert to string before outputting:
System.out.println("The (x,y) is: ("+tmpI+","+tmpJ+")");
Be careful with your array dimensions! The second for-statement most of you have is wrong. It should go to up to arr[i].length:
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
tmpI = i; tmpJ = j;
}
}
}
Store i, j whenever you update max.
This would be if you wanted a single index into a flatten array:
public static void main (String[] args) throws java.lang.Exception
{
int[][] arr = {{4, 44, 5, 7, 63, 1}, {7, 88, 31, 95, 9, 6}, {88, 99, 6, 5, 77, 4}};
int[] flattened = new int[6*3]; // based off above
int maxIndex = 0;
double max = arr[0][0];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
flattened[i + j] = arr[i][j];
if (arr[i][j] > max) {
max = arr[i][j];
maxIndex = i+j;
}
}
}
System.out.println(max);
System.out.println(flattened [maxIndex]);
}
int[][] arr = {{4, 44, 5, 7, 63, 1}, {7, 88, 31, 95, 9, 6}, {88, 99, 6, 5, 77, 4}};
int max = arr[0][0];
int maxI = 0, maxJ = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
maxI = i;
maxJ = j;
}
}
}
System.out.println(max);
System.out.println(maxI + "," + maxJ);
You've got a two-dimensional array, therefore you need to know both indexes. Adding them together won't do because you lose which-is-which. How about this:
System.out.println("[" + i + "][" + j + "]");
//C++ code
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> b;
vector<int> c;
int Func(int a[][10],int n)
{
int max;
max=a[0][0];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
b.push_back(i);
c.push_back(j);
}
}
}
b.push_back(0);
c.push_back(0);
return max;
}
void display(int a[][10],int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
}
int main()
{
int a[10][10],n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
cout<<endl;
display(a,n);
cout<<endl;
cout<<Func(a,n)<<" is the greatest "<<endl;
if(b.size()==1&&c.size()==1)
{
cout<<"Location is (1,1)"<<endl;
}
else
{
b.erase(b.end() - 1);
c.erase(c.end() - 1);
cout<<"Location is "<<"("<<b.back()+1<<","<<c.back()+1<<")"<<endl;
}
return 0;
}
You're just adding the indices i and j together and then printing it to the screen. Since you're running throug the entire loop it's just going to be equal to 2*arr.length-2. What you need to do is store the values of i and j when you encounter a new max value.
For example:
int[][] arr = {{4, 44, 5, 7, 63, 1}, {7, 88, 31, 95, 9, 6}, {88, 99, 6, 5, 77, 4}};
int max = arr[0][0]; //dunno why you made it double when you're dealing with integers
int max_row=0;
int max_column=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
max_row=i;
max_column=j;
}
}
System.out.println("The max is: "+max+" at index ["+max_row+"]["+max_column+"]");
Don't sure that you implement effective algorithm, but why you just don't save indices i,j in another variables when you set max.
This is very simple.
if (arr[i][j] > max) {
max = arr[i][j];
maxX = i;
maxY = j;
}
FYI If you want look at "insertion sorting" algorithms if you want better implementation.