outclass 내에서 새 인스턴스를 선언하기 때문에 왜이 코드가 문제를 일으키는 지 이해할 수 없습니다.비 정적 변수 이것은 Java의 정적 컨텍스트에서 참조 할 수 없습니다.
다음은 문제의 해결책입니다 (UvA-103) : 103-StackingBoxes. NullPointerExceptions를의
원래 내가 얻고 있었다 런타임 오류 :
C:\Users\User\Desktop\103-StackingBoxes>java
Main
5 2
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:27)
는 그 고정,하지만 지금 나는 다음과 같은 컴파일 오류가 점점 오전 : 일반적으로 Java로 피할 수있다
C:\Users\User\Desktop\103-StackingBoxes>javac
Main.java
Main.java:28: error: non-static variable this cannot be referenced from a static
context
boxArray[i] = new box();
^
1 error
내가 내부 클래스를 알고를 , 그러나 나는 왜 특히 내 진술이 작동하지 않는지 모르겠다.
import java.util.*;
import java.io.*;
//import java.util.Arrays;
public class Main
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
int k,n;
while(input.hasNext())
{
System.out.printf("\n");
k = input.nextInt();
n = input.nextInt();
// box boxArray[] = new box(n)[k];
box[] boxArray = new box[k];
for(int i =0; i< k; i++)
{
boxArray[i] = new box();
//boxArray[i] = boxArray[i].box(n);
boxArray[i].totalDim = n;
for(int j =0; j < n; j++)
{
boxArray[i].dimensions[j]=input.nextInt();
}
}
boxArray = sortBoxArray(boxArray);
int count = 1;
for(int i =k-1; i > 1 ; i--)
{
if(boxArray[i].doesArgBoxFitInside(boxArray[i-1]))
count++;
else
break;
}
System.out.printf("%d\n",count);
for(int i = k-count; i < k ; i++)
{
if(i == k-1)
System.out.printf("%d",boxArray[i].placeNumber);
else
System.out.printf("%d ",boxArray[i].placeNumber);
}
}
}
public static box[] sortBoxArray(box[] boxArray)
{
for(int i = 1; i < boxArray.length; i++)
{
for(int j = boxArray.length-1; j>=i; j++)
{
boolean skip = false;
for(int k = 0; k < boxArray[j].totalDim; k++)
{
if(boxArray[j].dimensions[k]<boxArray[j].dimensions[k-1])
{
box temp = boxArray[j-1];
boxArray[j-1] = boxArray[j];
boxArray[j]=temp;
}
}
}
}
return boxArray;
}
public class box{
/*******************************************Fields***********************************************/
public int totalDim;
public int dimensions[];
//The field I forgot about
public int placeNumber;
/*******************************************Methods**********************************************/
public box()
{
this.totalDim = -1;
this.dimensions= new int[0];
this.placeNumber = -1;
}
public box(int totalDim)
{
this.totalDim = totalDim;
this.dimensions = new int[totalDim];
}
//public box(int totalDim, int[totalDim] dimensions)
public box(int totalDim, int[] dimensions)
{
this.totalDim = totalDim;
this.dimensions = dimensions;
sortDim();
}
public void sortDim()
{
Arrays.sort(dimensions);
}
public boolean doesArgBoxFitInside(box wop)
{
if(this.totalDim != wop.totalDim)
return false;
else
{
for(int i =0; i < totalDim; i++)
{
if(this.dimensions[i]<wop.dimensions[i])
return false;
}
return true;
}
}
}
}
난은 (는) 기본 클래스이기 때문에 또한, Main.new 상자()가 오류를 반환 ... 먼저 outerClass를 인스턴스화되어있어 방법으로 다음 혼란 스러워요. – DavidRC
'box'를 정적으로 만들거나 그것을 자신의 클래스로 분해합니다. – Smutje
고마워요! 이것은 많은 것을 설명하는 데 도움이됩니다! 내 코드는 이제 런타임 오류를 제공하고 있지만 지금은 이것을 이해합니다. – DavidRC