我想知道如何使用方法a[i][j]
中的变量Scores()
在以下代码中的方法MD()
和sumD()
中使用它:
在我的代码中,方法MD()
和sumD()
无法获得结果。
public class Test3 {
public void Scores() {
double[][] a= new double[3][5];
int i,j;
for(i=0; i<3; i++ ){
for(j=0; j<5; j++){
a[i][j]= (double) Math.random();
System.out.println("a[" + i + "][" + j + "] = " +a[i][j]);
}
}
}
public void MD(){
double[][] b =new double[3][5];
int [] m = new int[5];
int i,j;
//double[][] a= new double[3][5];
for(j= 0; j<5; j++)
for(i=0 ; i<3 ; i++)
{
b[i][j]=0.0;
if(a[i][j]>0.0)
m[j]++;
}
for(j= 0; j<5; j++){
for(i=0 ; i<3 ; i++) {
if(a[i][j] > 0.0){
b[i][j]=a[i][j]*m[j];
System.out.println("b[" + i + "][" + j + "] = " + b[i][j]);
}
}
}
}
public void sumD(){
int i,j,n;
double[] sum= new double[3];
double[] k= new double[3];
//double[][] a= new double[3][5];
for(i=0; i<3; i++){
n=0;
sum[i]=0.0;
for(j=0; j<5; j++){
if(a[i][j]>0.0){
sum[i] += (a[i][j])*2;
n++;
}
}
k[i]=sum[i]/n;
System.out.println("k[" + i + "] = " + k[i]);
}
}
public static void main(String[] args){
Test3 print= new Test3();
print.Scores();
print.MD();
print.sumD();
}
}
提前致谢。
答案 0 :(得分:13)
你做不到。方法中定义的变量是该方法的本地变量。
如果要在方法之间共享变量,则需要将它们指定为类的成员变量。或者,您可以将它们从一个方法传递给另一个方法作为参数(这并不总是适用)。
答案 1 :(得分:5)
看起来你正在使用实例方法而不是静态方法。
如果您不想创建对象,则应将所有方法声明为静态,如
private static void methodName(Argument args...)
如果您希望所有这些方法都可以访问变量,则应该在方法之外初始化它并限制其范围,将其声明为私有。
private static int[][] array = new int[3][5];
全局变量通常被低估(特别是对于像你这样的情况),因为在大型程序中它们会造成严重破坏,因此将其设为私有将至少可以防止出现问题。
另外,我会说平常:你应该试着保持你的代码有点整洁。使用描述性的类,方法和变量名称,并保持代码整洁(适当的缩进,换行等)和一致。
以下是您的代码应该是什么样的最终(缩写)示例:
public class Test3 {
//Use this array in your methods
private static int[][] scores = new int[3][5];
/* Rather than just "Scores" name it so people know what
* to expect
*/
private static void createScores() {
//Code...
}
//Other methods...
/* Since you're now using static methods, you don't
* have to initialise an object and call its methods.
*/
public static void main(String[] args){
createScores();
MD(); //Don't know what these do
sumD(); //so I'll leave them.
}
}
理想情况下,既然您正在使用数组,那么您将在main方法中创建数组并将其作为参数传递给每个方法,但解释它是如何工作的可能是一个全新的问题,所以我会留在那。
答案 2 :(得分:2)
只需移动a
的声明,使其成为类Test3
的私有属性,如下所示:
public class Test3 {
private double[][] a;
public void Scores() {
a= new double[3][5];
int i,j;
...etc...
答案 3 :(得分:1)
只需将[i] [j]作为类变量,将其声明在Scores()
之外,在类名下方
public class Test3 {
double[][] a= new double[3][5];
public void Scores() {
....
}
.....
}
答案 4 :(得分:1)
您可以将2-d数组指针声明为类的成员。然后在成员函数中声明大小和值。在这种情况下,您可以从另一个函数访问它..
请参阅此代码中使用T [] []
public class Knapsack {
//private static Scanner in;
int T[][];
int MaximumVal(int wt[],int val[], int total){
int l=total;
int m=val.length;
T = new int[m+1][l+1];
for (int i=0; i<=m; i++){
for(int j=0; j<=l; j++){
if(i==0 || j==0){
T[i][j]=0;
continue;
}
if(j-wt[i-1] >= 0){
T[i][j]=Math.max(T[i-1][j], val[i-1]+T[i-1][j-wt[i-1]]);
}
else{
T[i][j]=T[i-1][j];
}
}
}
return T[m][l];
}
void PrintPath(int wt[], int val[]){
int i=T.length-1;
int j=T[0].length-1;
while(j!=0){
if(i>0){
while(T[i][j]==T[i-1][j]){
i--;
}
}
System.out.print(wt[i-1]+" ");
j=j-wt[i-1];
i--;
}
}
//Main Function with test case ::
public static void main(String args[]){
int wt[]={1,3,4,5};
int val[]={1,4,5,7};
Knapsack K = new Knapsack();
System.out.print("Enter the total value: ");
//in = new Scanner(System.in);
//int total = in.nextInt();
int result = K.MaximumVal(wt,val,7); // pass total
System.out.println("Total value is "+ result);
K.PrintPath(wt,val);
}
}
答案 5 :(得分:0)
传入一个参数或创建一个类var
答案 6 :(得分:0)
如果您希望能够使用2d矩阵a,则需要在方法之外声明它。
public class Test3 {
double[][] a= new double[3][5];
public void Scores() {
//double[][] a= new double[3][5];
int i,j;
for(i=0; i<3; i++ ){
for(j=0; j<5; j++){
a[i][j]= (double) Math.random();
System.out.println("a[" + i + "][" + j + "] = " +a[i][j]);
}
}
}
.......
你会看到我在函数外部移动了一个(以前在Scores(里面),我已经注释掉了)的声明,它现在是Test3类的一个字段。 在函数内声明变量时,它是该函数的本地变量。它不能被其他函数等看到。如果你将它声明为类字段,你的函数就可以看到它。看看这个,因为它可能有所帮助。语言/ VariableScope.htm“&GT; HTTP://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm 术语“范围”仅指变量的生命周期以及可以看到的位置。希望这有帮助!
答案 7 :(得分:0)
public class Test3 {
double[][] a=new double[3][5];
public void Scores() {
int i,j;
for(i=0; i<3; i++ ){
for(j=0; j<5; j++){
a[i][j]= (double) Math.random();
System.out.println("a[" + i + "][" + j + "] = " +a[i][j]);
}
}
}
public void MD(){
double[][] b =new double[3][5];
int [] m = new int[5];
int i,j;
//double[][] a= new double[3][5];
for(j= 0; j<5; j++)
for(i=0 ; i<3 ; i++)
{
b[i][j]=0.0;
if(a[i][j]>0.0)
m[j]++;
}
for(j= 0; j<5; j++){
for(i=0 ; i<3 ; i++) {
if(a[i][j] > 0.0){
b[i][j]=a[i][j]*m[j];
System.out.println("b[" + i + "][" + j + "] = " + b[i][j]);
}
}
}
}
public void sumD(){
int i,j,n;
double[] sum= new double[3];
double[] k= new double[3];
//double[][] a= new double[3][5];
for(i=0; i<3; i++){
n=0;
sum[i]=0.0;
for(j=0; j<5; j++){
if(a[i][j]>0.0){
sum[i] += (a[i][j])*2;
n++;
}
}
k[i]=sum[i]/n;
System.out.println("k[" + i + "] = " + k[i]);
}
}
public static void main(String[] args){
Test3 print= new Test3();
print.Scores();
print.MD();
print.sumD();
}
}
答案 8 :(得分:-2)
public class Practise {
String a;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
void meth1(){
this.setA("asd");
System.out.println(a);
}
void meth2(){
String b="qwerty";
System.out.println(getA()+" "+b);
}
public static void main(String[] args) {
Practise p= new Practise();
p.meth1();
p.meth2();
}
}