Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建静态对象字段时会出现什么问题? import java.util.Scanner; 公共类购买{ 公共静态采购项目; 公共静态扫描仪详细信息; 公共静态void main(字符串[]args){ 详细信息=新扫描仪(System.in); 项目=新采购(); int invoice=details.nextInt(); 布尔发票范围=((发票>=1000)和&(发票=0) { 项目.销售(销售); } item.display(); } }_Java_Object_Instance_Instance Variables - Fatal编程技术网

创建静态对象字段时会出现什么问题? import java.util.Scanner; 公共类购买{ 公共静态采购项目; 公共静态扫描仪详细信息; 公共静态void main(字符串[]args){ 详细信息=新扫描仪(System.in); 项目=新采购(); int invoice=details.nextInt(); 布尔发票范围=((发票>=1000)和&(发票=0) { 项目.销售(销售); } item.display(); } }

创建静态对象字段时会出现什么问题? import java.util.Scanner; 公共类购买{ 公共静态采购项目; 公共静态扫描仪详细信息; 公共静态void main(字符串[]args){ 详细信息=新扫描仪(System.in); 项目=新采购(); int invoice=details.nextInt(); 布尔发票范围=((发票>=1000)和&(发票=0) { 项目.销售(销售); } item.display(); } },java,object,instance,instance-variables,Java,Object,Instance,Instance Variables,运行此代码时不会出现语法或语义错误。如果您为发票和销售输入了正确的值,则运行时不会出现任何问题。我面临的问题似乎是合乎逻辑的,我真的不明白为什么。在通过第一个循环周期后,它会不断请求我输入值,就好像它没有通过一样他不再检查相位,这会导致无限循环 我不认为布尔逻辑是错误的,因为它在提供正确的值时起作用,但我认为在假设任何东西之前,我应该在这里询问 我认为这与我将对象声明为静态字段有关。我想通过将CreatePurchase类设置为字段,使其成为CreatePurchase类的一部分。Java不允许

运行此代码时不会出现语法或语义错误。如果您为
发票
销售
输入了正确的值,则运行时不会出现任何问题。我面临的问题似乎是合乎逻辑的,我真的不明白为什么。在通过第一个循环周期后,它会不断请求我输入值,就好像它没有通过一样他不再检查相位,这会导致无限循环

我不认为布尔逻辑是错误的,因为它在提供正确的值时起作用,但我认为在假设任何东西之前,我应该在这里询问

我认为这与我将对象声明为静态字段有关。我想通过将
CreatePurchase
类设置为字段,使其成为
CreatePurchase
类的一部分。Java不允许我在不创建
CreatePurchase
类实例的情况下访问它,我认为这是递归的,会导致使它们静态工作,但我认为字段要么在第一次输入后停止接收值,要么布尔逻辑就是错误的


此问题来自该问题所基于的相同赋值。

invoiceRange不会在while中更新,因此它始终包含相同的值,while永远不会结束。

问题是因为您的invoiceRange在while循环中没有重置为true


您需要将其设置为
invoiceRange=true
内部while循环或使用
break
关键字中断循环

您应该在此处使用do while循环:

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();
    }
}
但是,如果您想在检查是否需要继续执行该操作(检查发票值是否在可接受范围内)之前执行某项操作(从用户处读取发票值),则最好先执行一段时间


最后一点注意:由于在
main
方法中只使用
item
details
,因此最好在方法中声明和初始化它们。这使代码更具可读性,并帮助您跟踪变量发生更改的位置,从而更容易识别is的原因问题。

您的布尔条件
(!invocrange)
在循环中从未更改,因此它是无限的。您的问题标题有误导性——对象既不是静态的,也不是实例——它们只是静态的。另一方面,变量可以声明为静态的,也可以不声明为静态的(所谓的实例变量),并且同一个对象可以被静态字段和实例字段引用。如果只能从
main
方法访问这些对象,那么将这些对象转换为静态字段没有多大意义。您的标题与实际问题无关。@EJP我认为有一个问题与尝试从静态字段调用对象有关上下文。原来是布尔逻辑。很抱歉,对Java有些陌生。不,他需要重新评估布尔条件,以检查新输入是否可接受。@a-先生,我不敢相信我忽略了如此基本的东西……谢谢你的建议。我对Java是新手,所以我一直在研究Java的独特类型系统,甚至没有尝试查看更改布尔逻辑是否有帮助。这是否意味着静态引用正常?考虑静态关键字的工作方式,这似乎不太可能。@i0h3是的,静态引用正常,不会妨碍程序正确运行。但正如我在回答中提到的,最好不要使用stati关键字c类字段,而只是在
main
方法中声明它们。
int invoice;
do {
    invoice = details.nextInt();
} while (invoice < 1000 || invoice > 8000);
int invoice = details.nextInt();
boolean invoiceRange = ((invoice >= 1000) && (invoice <= 8000));
while (!invoiceRange)
{
    invoice = details.nextInt();
    // Need this line to update the value of invoiceRange every
    // time a new invoice value is read in
    invoiceRange = ((invoice >= 1000) && (invoice <= 8000));
}