【问题标题】:I don't know why this code does line breaking by itself我不知道为什么这段代码会自行换行
【发布时间】:2018-08-14 11:11:42
【问题描述】:

我把这段代码分成三部分;主要,DisSystem,DisIndexerUI。 其目的是计算不适指数。计算系统完美运行,但我发现打印的结果有问题。结果如下:

input temperature
36
input humidity
42    
Discomfort Index:96.75999999999999    
Very very uncomfortable    
It is

我认为它应该打印“非常非常不舒服”,但我打印的结果是

Very very uncomfortable    
It is

这是一个非常奇怪的情况。我想知道为什么会这样。

我当然知道,如果我这样修复它:

    System.out.println("Discomfort Index:"+ ui.input());
    System.out.print("It is ");
    ui.status();

它将打印“非常非常不舒服”。 但我认为这只是一个临时解决方案。为什么会断线?

public class Main {
public static void main(String[] args) {

    double temp = 0;
    double humidity = 0;

    DisSystem dis = new DisSystem();
    DisIndexerUI ui = new DisIndexerUI(dis);

    System.out.println("Discomfort Index:"+ ui.input());
    System.out.println("It is" + ui.status());

}
}    
==================================
public class DisSystem {    

public static double Formula(double temp, double humidity) {
    double formula = 0.72 * (temp + humidity) + 40.6;
    return formula;
}

    }    
=================================
import java.util.Scanner;

public class DisIndexerUI {
DisSystem disSystem;
double formula = 0;

public DisIndexerUI(DisSystem disSystem) {
    this.disSystem = disSystem;
}

public double input() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("input temperature");
    double temp = Double.parseDouble(scanner.nextLine());
    System.out.println("input humidity");
    double humidity = Double.parseDouble(scanner.nextLine());
    formula = disSystem.Formula(temp, humidity);
    return formula;
}

public String status() {
    String str = "";
    if (formula >= 86) {
        System.out.println("Very very uncomfortable");
    } else if (formula >= 83) {
        System.out.println("Very uncomfortable");
    } else if (formula >= 80) {
        System.out.println("uncomfortable");
    } else if (formula >= 75) {
        System.out.println("nomal");
    } else if (formula >= 70) {
        System.out.println("good");
    } else if (formula >= 68) {
        System.out.println("very good");
    }
    return str;

    }

}    

【问题讨论】:

  • 看看status(),然后想想你期望它做什么(我假设返回状态字符串)以及它实际做了什么(打印状态字符串并返回一个空字符串)。此外,启动调试器并亲自查看(学习这样做对将来有很大帮助)。
  • 想想“为什么status()返回一个字符串?”

标签: java line-breaks


【解决方案1】:

您只需在status 方法中返回一个空字符串,但打印实际值。

public String status() {
    if (formula >= 86) {
        return "Very very uncomfortable";
    } else if (formula >= 83) {
        return "Very uncomfortable";
    } else if (formula >= 80) {
        return "uncomfortable";
    } else if (formula >= 75) {
        return "nomal";
    } else if (formula >= 70) {
        return "good";
    } else if (formula >= 68) {
        return "very good";
    } else {
        return "";
    }
}

进一步检查 else 语句中的空字符串是否适合您的用例。

【讨论】:

    【解决方案2】:

    您正在使用 System.out.println("Text"); 在打印字符串后将光标移动到下一行。如果您希望字符串通过多个打印语句位于同一行,请使用 System.out.print("Text");.

    【讨论】:

    • 如果作者遵循这条线索,他最终会得到“非常非常不舒服”的结果。我不认为这是期望的行为。
    【解决方案3】:

    此声明

    System.out.println("It is" + ui.status());
    

    调用 DisIndexerUI 实例 uistatus 成员,该成员首先打印文字,然后换行符返回空字符串,即连接到第一个操作数,然后打印评估的 "It is" + ""。更改 DisIndexerUI 的 status() 方法以返回文字而不是打印它会解决问题。

    public String status() {
        String str = "";
        if (formula >= 86) {
            str = "Very very uncomfortable";
        } else if (formula >= 83) {
            str = "Very uncomfortable";
        } else if (formula >= 80) {
            str = "uncomfortable";
        } else if (formula >= 75) {
            str = "nomal";
        } else if (formula >= 70) {
            str = "good";
        } else if (formula >= 68) {
            str = "very good";
        }
        return str;
    
    }
    

    【讨论】:

      【解决方案4】:

      快速修复:

      System.out.println("It is" + ui.status());替换为ui.status()

      System.out.print("It is "); 作为status 方法中的第一条语句。

      更好的方法:遵循 Thomas 的建议 - 对问题发表评论。

      编辑:

      实际上,代码并没有破坏,它的行为符合预期。

      main 方法中,调用System.out.println("It is" + ui.status());。这里要注意的是status方法会先执行并返回一个值。然后,返回的值(即在该方法中声明的空字符串)将与字符串连接 - “它是”。因此,当执行跳转到status 方法时,您将根据条件打印字符串。因此,首先将打印这些字符串中的任何一个,然后返回一个值。因此,您看到的输出符合预期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多