@Ramzesz

Как правильно обратиться к переменной?

Доброго времени суток, я новичок, поэтому не кидайтесь сильно всяким.
Проблема: Я считаю определители у квадратных матриц, хочу в main обратиться к переменной lgth, и чтоб лишнее не выводилось, определять какая размерность и выводить нужный метод.

Вот main, где я хочу обратиться правильно к переменной lgth, которую я считываю из класса Field:
package com.company;

public class Main {

    public static void main(String[] args) {
        Field f1 = new Field();
        f1.create();
        if (f1.lgth == 1);
        {
            System.out.println(Field.determinant(f1.a[0][0]));
        }
        if (f1.lgth == 2);
        {
            System.out.println(Field.determinant(f1.a[0][0], f1.a[0][1], f1.a[1][0], f1.a[1][1]));
        }
        if (f1.lgth == 3);
        {
            System.out.println(Field.determinant(f1.a[0][0], f1.a[0][1], f1.a[0][2], f1.a[1][0], f1.a[1][1], f1.a[1][2], f1.a[2][0], f1.a[2][1], f1.a[2][2]));
        }
    }

}


класс Field:
package com.company;
import java.lang.*;
import java.util.Scanner;

public class Field {
    public static int lgth;
    int a[][];
    public void create()
    {
        Scanner len=new Scanner(System.in);
        System.out.println("Введите размерность матрицы");
        int lgth = len.nextInt();
        a=new int[lgth][lgth];
        for (int i=0;i < a.length;i++){
            for (int j=0;j < a[i].length;j++){
                a[i][j]=(int)(Math.random()*10);
            }
        }
        for (int i=0;i < a.length;i++,System.out.println()){
            for (int j=0;j < a[i].length;j++){
                System.out.print(a[i][j]+" ");
            }
        }
    }

    public static double determinant (int a00){
        int tempdetermin = a00;

        return tempdetermin;

    }

    public static double determinant (int a00, int a01, int a10, int a11){
        int tempdetermin = (a00*a11)-(a10*a01);
        return tempdetermin;
    }
    public static double determinant (int a00, int a01,int a02, int a10, int a11,int a12,int a20,int a21,int a22){
        int tempdetermin = (a00*a11*a22)+(a10*a21*a02)+(a01*a12*a20)-(a02*a11*a20)-(a01*a10*a22)-(a00*a21*a12);
        return tempdetermin;
    }
}
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Еле кровь с глаз и клавиатуры оттер.
У вас крайне бесполезная мешанина, кратко что не так:
1) static нужно избегать всеми возможными путями. Представьте что у вас будет если вы захотите создать еще один экземпляр Field, они будут мешать друг другу.
2) Класс Field не несет практического смысла т.к. все что можно и нельзя static.
3) Класс должен выполнять максимально возможную "узкую" логику
4) Что ,s общаться с классами нужно использовать getЧтоТо для получения и setЧтоТо для задания параметров и действий.
5) Давайте максимально осмысленные названия всему, но без фанатизма

Если не совсем полностью правильно но пока еще просто(без интерфейсов и фабрик) максимально близко к вашему должно быть как то так:
public class Main {
    public static void main(String[] args) {
        Scanner len=new Scanner(System.in);
        System.out.println("Введите размерность матрицы");
        int lengh = len.nextInt();
        Field field1 = new Field(lengh);
        System.out.println(field1.toString()());
        System.out.println(field1.getDeterminant());
}

И класс сам:
public class Field {
    private int lgth;
    private int a[][];
    public Field(int lengh){
        lgth = lenght;
        a=new int[lgth][lgth];
        for (int i=0;i < a.length-1;i++){
            for (int j=0;j < a[i].length-1;j++){
                a[i][j]=(int)(Math.random()*10);
            }
        }
    }

    public int getDeterminant(){
        switch(lght):
		case 1: return determinant1();
		case 2: return determinant2();
		case 3: return determinant3();
		default: return -1; //Если не реализовано
    }
	
    private int determinant1(){
        int tempdetermin = матан;
        return tempdetermin;
    }
    private int determinant2(){
        int tempdetermin = матан;
        return tempdetermin;
    }
    private int determinant3(){
        int tempdetermin = матан;
        return tempdetermin;
    }
    @Override
    public String toString(){
       String str ="";
       for (int i=0;i < a.length-1;i++){
            for (int j=0;j < a[i].length-1;j++){
                str+=(a[i][j]+" ");
            }
            str+="\n";
        }
        return str;
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы