import java.util.Scanner;
public class CreatePurchase {
public static Purchase item;
public static Scanner details;
public static void main(String[] args) {
details = new Scanner(System.in);
item = new Purchase();
int invoice = details.nextInt();
boolean invoiceRange = ((invoice >= 1000) && (invoice <= 8000));
while (!invoiceRange)
{
invoice = details.nextInt();
}
item.setInvoice(invoice);
double sale = details.nextDouble();
if (sale >= 0)
{
item.setSale(sale);
}
item.display();
}
}
이 코드를 실행할 때 구문이나 의미 오류가 나타나지 않습니다. invoice
및 sale
에 올바른 값을 입력하면 문제없이 실행됩니다. 내가 직면하고있는 문제는 논리적 인 것으로 보이며 그 이유를 정말로 이해하지 못합니다. 첫 번째 루프 사이클을 통과 한 후에도 계속해서 확인 단계를 거치지 않는 것처럼 입력 값을 입력하도록 요청하므로 무한 루프가 발생합니다.정적 개체 필드를 만들 때 어떤 문제가 발생합니까?
올바른 값을 제공 할 때 작동하기 때문에 부울 논리가 잘못되었다고 생각하지 않지만 무엇보다 먼저 가정해야한다고 생각했습니다.
내 개체를 정적 필드로 선언하는 것과 관련이 있다고 생각합니다. 나는 필드를 만들어 Purchase
클래스를 CreatePurchase
클래스의 일부로 만들고 싶습니다. Java는 CreatePurchase
클래스의 인스턴스를 만들지 않고 액세스 할 수 없도록되어 있습니다.이 클래스는 재귀 적이기 때문에 스택 오버플로가 발생합니다. 그 (것)들을 정체시키는, 그러나 나는 분야가 첫번째 입력 후에 가치를받는 중지하거나, 부울 논리가 다만 faulty다는 것을 생각한다.
이 질문은 Java use of static fields 질문의 대답과 동일한 질문에서 비롯된 것입니다.
부울 조건'(! invoceRange)'는 루프에서 변경되지 않으므로 무한하게됩니다. –
질문 제목은 오해의 소지가 있습니다. - 물체도 정적이거나 인스턴스가 아닙니다. 간단히 * are *입니다. *** 변수 ***은 정적으로 선언되거나 static으로 선언 될 수 있습니다 (소위 * 인스턴스 * 변수). 동일한 객체는 정적 필드와 인스턴스 필드에서 모두 참조 할 수 있습니다. –
'main' 메소드에서만 접근 할 수 있다면, 정적 인 필드로 객체를 만드는 것은별로 중요하지 않습니다. – 4castle