Одно утверждение "если" срабатывает, хотя этого не должно быть, независимо от того, как я пытаюсь его исправить
Я немного новичок в программировании, и в моем классе нам было поручено сделать программу для выполнения трех типов преобразований. Когда я запускаю эту программу, большинство ее аспектов работают совершенно нормально. Все команды работают нормально, но всякий раз, когда я прохожу через команду (например, "деньги") и выхожу из окна GUI, программа запускает оператор if для "null", но также все еще запускает тот, который выскакивает с предупреждением GUI. Я не могу понять, почему он это делает (как и мой учитель), и на данный момент я просто хочу знать, почему предупреждающий графический интерфейс всегда активируется, а не как это исправить.
Ps: Я знаю, что есть более простые способы выполнить то, что я хотел сделать, но в тот момент, когда я писал это, я был очень новым. Кроме того, этот материал является беспорядком на данный момент, и там все еще могут быть остатки неудачных попыток исправить эту проблему, извините.
Вот вам и код:
import javax.swing.JOptionPane; import java.util.Scanner; import java.text.DecimalFormat; public class Conversion { public static void main(String[] args) { DecimalFormat rnd2= new DecimalFormat("0.00"); DecimalFormat rnd5= new DecimalFormat("0.00000"); Scanner reader = new Scanner(System.in); double m, m1, m2, m3, i, cm, s, w, wr, d, dr, h, hr, min, minr, sec; String ask = "null",loop = "true"; if(ask.equals("null")) { System.out.println("Do you want to convert Money, Inches, Seconds, or All? End the program by typing \"End\"."); ask = reader.nextLine(); } if(ask.equals("End")) { loop = "false"; reader.close(); } else { while(loop.equals("true")) { if(!ask.equals("All") && !ask.equals("Money") && !ask.equals("Inches") && !ask.equals("Seconds") && !ask.equals("End") && !ask.equals("null")){ loop = "true"; ask = JOptionPane.showInputDialog(null,"Please Enter \"All\", \"Money\", \"Inches\", \"Seconds\", or type \"End\" to end the program.","WARNING",JOptionPane.WARNING_MESSAGE); } else if(ask.equals("All")) { System.out.println("Enter your money as \"Dollar.Cents\" in U.S. Dollars, then your inches, then seconds"); m = reader.nextDouble(); i = reader.nextDouble(); s = reader.nextDouble(); m1 = m*0.86; //Euro m2 = m*0.00016; //BitCoin m3 = m*19.3; //Peso cm = i*2.54; /* Super Sweaty Conversion Mumbo Jumbo */ w = (int)s/604800; wr = s - w*604800; d = (int)wr/86400; dr = wr - d*86400; h = (int)dr/3600; hr = dr - h*3600; min = (int)hr/60; minr = hr - min*60; sec = (int)minr; ask = "null"; loop = "true"; JOptionPane.showMessageDialog(null, "Your $"+m+" is equal to\n"+rnd2.format(m1)+" Euros\n"+rnd5.format(m2)+" BitCoins\n"+rnd2.format(m3)+" Pesos\n\n"+ i+" inches is eqaul to "+cm+" centimeters\n\n"+ s+" seconds is equal to "+w+" weeks, "+d+" days, "+h+" hours,"+min+" minutes, and "+sec+" seconds", "Conversions", JOptionPane.PLAIN_MESSAGE); } else if(ask.equals("Money")) { System.out.println("Enter your money as \"Dollar.Cents\" in U.S. Dollars"); m = reader.nextDouble(); m1 = m*0.86; //Euro m2 = m*0.00016; //BitCoin m3 = m*19.3; //Peso ask = "null"; loop = "true"; JOptionPane.showMessageDialog(null, "\nYour $"+m+" is equal to\n"+rnd2.format(m1)+" Euros\n"+rnd5.format(m2)+" BitCoins\n"+rnd2.format(m3)+" Pesos\n", "Conversion", JOptionPane.PLAIN_MESSAGE); } else if(ask.equals("Inches")) { System.out.println("Enter your length in Inches"); i = reader.nextDouble(); cm = i*2.54; ask = "null"; loop = "true"; JOptionPane.showMessageDialog(null, "\n"+i+" inches is eqaul to "+cm+" centimeters\n", "Conversion", JOptionPane.PLAIN_MESSAGE); } else if(ask.equals("Seconds")) { System.out.println("Enter the number of seconds to convert"); s = reader.nextDouble(); w = (int)s/604800; wr = s - (int)w*604800; d = (int)wr/86400; dr = wr - (int)d*86400; h = (int)dr/3600; hr = dr - (int)h*3600; min = (int)hr/60; minr = hr - (int)min*60; sec = (int)minr; ask = "null"; loop = "true"; JOptionPane.showMessageDialog(null, "\n"+s+" seconds is equal to "+w+" weeks, "+d+" days, "+h+" hours,"+min+" minutes, and "+sec+" seconds\n", "Conversion", JOptionPane.PLAIN_MESSAGE); } else if(ask.equals("End")) { loop = "false"; reader.close(); } else if(ask.equals("null")) { System.out.println("Do you want to convert Money, Inches, Seconds, or All? End the program by typing \"End\"."); ask = reader.nextLine(); } } } } }
Что я уже пробовал:
Я попытался изменить операторы "else if" на каждую комбинацию и вариацию if, else и else, если бы я мог придумать, а также изменить критерии для всех операторов if
Используя только оператор else для графического интерфейса предупреждения, не все вещи &&!ask.equals
Также только с помощью одного усилителя;
С помощью третьей, внешней переменной, чтобы направить поток, если заявления
Изменение порядка высказываний (в этот момент я был в отчаянии)
ZurdoDev
1. какая строка кода выполняется, когда вы не думаете, что это должно быть?
2. Отладки кода. Поставьте точку останова и шагните через нее. Отладка является наиболее важным навыком, чтобы узнать, как разработчик.
Richard Deeming
while(loop.equals("true"))
Если бы только Ява была один
boolean
тип[^] чтобы справиться с такими вещами! :Д