向量的2d矩阵

时间:2016-03-08 17:06:49

标签: java matrix

如果:2我应该将2d下三角矩阵转换为矢量,但是没有结果,它只显示了diognal。 我尝试了很多版本。 例如,我有随机矩阵:

  

1 0 0

     

7 5 0

     

8 2 9

所以,我需要:

  

1 7 5 8 2 9

任何帮助,请????

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;

    public class Ld {


    public static void main(String[] args) {
    int A[][] = new int [10][10];   // Matricas inicializaacija
    int B[] = new int [55];         // Vektora inicializaacija
    int C[] = new int [10];         // Vektora inicializaacija
    int D[] = new int [10];         // Vektora inicializaacija
    boolean mat = false;            // Mainiigaa mat defineesana ar staavokli false
    boolean arr = false;            // Mainiigaa arr defineesana ar staavokli false
    int searchKey;                  // Mainiigaa searchKey defineesana
    int  a, i, j, c = 0;
    String st;
    Ld insertion = new Ld();
    Ld selection = new Ld();
    Random rnd = new Random();

    System.out.println("Paula Plauča RDBF09 151RDB331");
    System.out.println();

    Scanner in = new Scanner(System.in);
    // Izvada izveelni
        System.out.println("Masiva aizpildisana ar gadijuma vertibam     : 1");
        System.out.println("Masiva homogenu vertibu ierakstisana vektora : 2");
        System.out.println("Vektora elementa lineara algoritma meklesana : 3");
        System.out.println("Vektora skirosana ar iesprausanu (Insertion) : 4");
        System.out.println("Ja velaties iziet no sistemas nospiediet     : 0");

    boolean quit = false;           // Mainiigaa quit defineesana ar staavokli false
    int menuItem;
    do {
          System.out.println();
          System.out.println("Izvelieties saskarnes vertibu : ");
          menuItem = in.nextInt();          // Mainiigajam menuItem pieskir case veertiibu skaitu
          switch (menuItem) {
        // Izveelnes pirmaa punkta realizaacija. Matricas aizpildisana ar patvaliigaam veertiibaam
          case 1:
            for (i=0; i<=9; i++)
                for (j=0; j<=9; j++) 
                     if (j<=i) {
                        A[i][j] = rnd.nextInt(10)+1;
                     }
            System.out.println();
            System.out.println();

            for (i=0; i<=9; i++) {
                for (j=0; j<=9; j++)
                    System.out.print(A[i][j] + "\t");
                System.out.println();
            } mat = true;
                break;
        // Izveelnes otraa punkta realizaacija. Vektora aizpildisana ar patvaliigaam veertiibaam
          case 2:
            if (!mat){
                System.out.println("Sakuma nepieciesams izveidot masivu");
                continue;
            }
            for (i=0; i<=9; i++)
                for (j=0; j<=9; j++) 
                     if (j<=i) {
                        B[i] = A[i][j];
                     }
            System.out.print("Iegutais vektors ir  :   ");
            for(int i1 = 0; i1 < B.length; i1++){
                    System.out.print(B[i1] + " ");
            } arr = true;
            System.out.println();
            break;

           // Pabeigt progammas darbiibu
          case 0:
            quit = true;
            break;                    
          default:
                System.out.println("Ievadita nepienemama vertiba.");
          }
    } while (!quit);
    in.close();
    System.out.println("Bye-bye!");

} }

1 个答案:

答案 0 :(得分:0)

您的问题是使用以下代码:

for (i=0; i<=9; i++)
    for (j=0; j<=9; j++) 
        if (j<=i) {
            B[i] = A[i][j];
        }

内部循环不断覆盖相同的位置B[i],因此只保留复制的最后一个值(其中j == i)。

你想要更像的东西:

int k=0;
for (i=0; i<=9; i++) {
    for (j=0; j<=9; j++) {
        if (j<=i) {
            B[k++] = A[i][j];
        }
    }
}