//Import scanner
import java.util.Scanner;
public class PrintCostCalculator{
public static void main(String[] args)
{
//Define variables
Scanner keyboard = new Scanner(System.in);
final double text = 5000; //Text dots per page
final double image = 10000; //Image dots per page
final double cText = 15000; //Compressed text dots per page
final double statement = 7000; //Statement dots per page
final double color = (5e-5); //Color ink cost per dots
final double black = (1e-5); //Black ink cost per dots
Double estimatedCost = 0.0;
//Pages to print
System.out.printf("--- Price Estimator Program ---%nEnter Number of Pages (digits only): ");
int pagestoPrint = keyboard.nextInt();
//Print Type
System.out.printf("%n---- Select a Print Type ----%nEnter T or t for Text%nEnter I or i for Image%nEnter C or c for Compressed Text%nEnter S or s for statement%n---------------------------%nEnter Print Type: ");
String pType = keyboard.next(); //pType is print type variable holder
char PrintType = pType.charAt(0);
//Print Color
System.out.printf("%n--- Select a Print Color ---%nEnter 0 for Grayscale%nEnter 1 for Color%n-----------------------------%nEnter Print Color: ");
int printColor = keyboard.nextInt();
System.out.printf("-----------------------------%nIs there a sale (y/n): ");
String sType = keyboard.next(); //sType is the sale type variable holder
String lower =sType.toLowerCase();
char saleType = sType.charAt(0);
System.out.print(lower);
//Calculation for color printing
if (printColor == 1 && lower == "t") {
estimatedCost = pagestoPrint * text / color;
} else {
if (printColor == 1 && lower == "i") {
estimatedCost = pagestoPrint * image / color;
} else {
if (printColor == 1 && lower == "c") {
estimatedCost = pagestoPrint * cText / color;
} else {
if (printColor == 1 && lower == "s") {
estimatedCost = pagestoPrint * statement / color;
// } else {
// System.out.println("oops");
}
}
}
}
//Calculation for black printing
if (printColor == 0 && lower == "t") {
estimatedCost = pagestoPrint * text / black;
} else {
if (printColor == 0 && lower == "i") {
estimatedCost = pagestoPrint * image / black;
} else {
if (printColor == 0 && lower == "c") {
estimatedCost = pagestoPrint * cText / black;
} else {
if (printColor == 0 && lower == "s") {
estimatedCost = pagestoPrint * statement / black;
// } else {
// System.out.println("oops2");
}
}
}
//EstimatedCost variable change
//Cost Estimate
System.out.printf("%n--- Cost Estimate ---%nInk Usage Per Page: ");
System.out.print( estimatedCost );
}
}
}
我的双倍估计成本不会更新。我的if else声明是否是这个原因?我一直在寻找,我找不到这个代码有什么问题。我在哪里可以学习更好地解决我的代码问题?有什么提示吗?
答案 0 :(得分:4)
我的if else陈述是否是原因?
是的,您的if
语句编写得不好,因为您使用==
来比较字符串。应使用equals
方法比较字符串。
例如此检查
lower == "i"
应替换为
"i".equals(lower);
注意:对文字进行反向检查,以避免在低于空的情况下的NPE
如上所述更新您的if条件并尝试运行您的程序。
答案 1 :(得分:0)
我认为还有一些错误,这是一个正确的版本:
//Import scanner
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
//Define variables
Scanner keyboard = new Scanner(System.in);
final double text = 5000; //Text dots per page
final double image = 10000; //Image dots per page
final double cText = 15000; //Compressed text dots per page
final double statement = 7000; //Statement dots per page
final double color = (5e-5); //Color ink cost per dots
final double black = (1e-5); //Black ink cost per dots
Double estimatedCost = 0.0;
//Pages to print
System.out.printf("--- Price Estimator Program ---%nEnter Number of Pages (digits only): ");
int pagestoPrint = keyboard.nextInt();
//Print Type
System.out.printf("%n---- Select a Print Type ----%nEnter T or t for Text%nEnter I or i for Image%nEnter C or c for Compressed Text%nEnter S or s for statement%n---------------------------%nEnter Print Type: ");
String pType = keyboard.next(); //pType is print type variable holder
pType = pType.toLowerCase(); //Added
char PrintType = pType.charAt(0);
//Print Color
System.out.printf("%n--- Select a Print Color ---%nEnter 0 for Grayscale%nEnter 1 for Color%n-----------------------------%nEnter Print Color: ");
int printColor = keyboard.nextInt();
System.out.printf("-----------------------------%nIs there a sale (y/n): ");
String sType = keyboard.next(); //sType is the sale type variable holder
String lower =sType.toLowerCase();
char saleType = sType.charAt(0);
//Calculation for color printing
if (printColor == 1){
if (PrintType == 't')
estimatedCost = pagestoPrint * text / color;
else if (PrintType == 'i')
estimatedCost = pagestoPrint * image / color;
else if (PrintType == 'c')
estimatedCost = pagestoPrint * cText / color;
else if (PrintType == 's')
estimatedCost = pagestoPrint * statement / color;
}
//Calculation for black printing
else if (printColor == 0){
if(PrintType == 't')
estimatedCost = pagestoPrint * text / black;
else if (PrintType == 'i')
estimatedCost = pagestoPrint * image / black;
else if (PrintType == 'c')
estimatedCost = pagestoPrint * cText / black;
else if (PrintType == 's')
estimatedCost = pagestoPrint * statement / black;
}
//EstimatedCost variable change
//Cost Estimate
System.out.printf("%n--- Cost Estimate ---%nInk Usage Per Page: ");
System.out.print( estimatedCost );
}
}
您无法将字符串与==进行比较,您必须使用.equals()。使用==,您可以比较参考中存储的地址。
你犯的最大错误是比较“较低”而不是“PrintType”。 lower包含“有销售”的答案,你想要比较的是印刷类型。所以我更改了它并在printedType上添加了toLowerCase()操作。