Помощь Нужно исправить код Java - PullRequest
2 голосов
/ 14 февраля 2009

У меня есть, но есть ошибка, я не понимаю :(. Я относительно новичок в Java.

package hw;
import java.util.Scanner;

public class Problem1
{
    public static void main (String [] args)
    {
        int cost; int number; double cost_unit; double total;

        Scanner entrada = new Scanner(System.in);            

        System.out.println("Please enter the cost of the product.");
        cost = entrada.nextInt();

        while (cost>0){

            System.out.println("Please enter the amount of units to be sold");
            number = entrada.nextInt();

            if (number>0);

            cost_unit = cost * 1.4;
            total = cost_unit*number;

            System.out.printf("Cost per unit will be $ %d\n",cost_unit);
            System.out.printf("Cost per unit will be $ %d\n",total);                                
        }
    }                
}

// Я просто хочу, чтобы пользователь ввел стоимость продукта, указал количество единиц, подлежащих заказу, и хочу, чтобы программа узнала окончательную цену продукта с прибылью 40%.

Ответы [ 9 ]

2 голосов
/ 14 февраля 2009

В printf %d для десятичного целого числа со знаком, тогда как cost_unit и total являются двойными. Вы должны использовать %f вместо.

System.out.printf("Cost per unit will be $ %f\n",cost_unit);
System.out.printf("Cost per unit will be $ %f\n",total);
2 голосов
/ 14 февраля 2009

Попробуйте и на самом деле опишите проблему:

Разве javac не компилировал его? Это проблема синтаксиса.

Разве программа не вела себя так, как вы предполагали? Какие части не ведут себя? Это логическая проблема.

Без адекватного описания проблемы, как вы могли бы ожидать, что вы или другие люди смогут легко найти ошибки? Вам понадобится этот навык, когда вы будете больше узнавать о программировании.

Вернуться к поиску проблем в вашем коде:

  • Стоимость отдельных предметов - целые числа. Не имеет смысла, если я хочу продавать жвачку, которая стоит 0,75 цента
  • цикл while будет бесконечно повторяться, если вы введете что-либо, кроме 0, для стоимости
  • если условие ничего не делает ... т.е. не имеет значения, ввели ли вы 0 или меньше единиц или больше 0 единиц
  • cost_unit = cost * 14 вы, вероятно, хотите назвать cost_unit чем-то вроде retail_unit - потому что это розничная цена. себестоимость * норма прибыли = розничная цена, нет?
1 голос
/ 14 февраля 2009

Вот, попробуйте это:

Я думаю, что это в значительной степени делает то, что вам нужно.

package hw;

import java.util.Scanner;


public class Problem1 {
    public static void main (String [] args) {
        int cost;
        int number; 
        double cost_unit = 0; 
        double total = 0;

        Scanner entrada = new Scanner(System.in);

        System.out.println("Please enter the cost of the product.");
        cost = entrada.nextInt();
        System.out.println("Please enter the amount of units to be sold");
        number = entrada.nextInt();

        cost_unit = cost * 1.4;
        if (number>0) {
            total = cost_unit*number;
        }

        System.out.printf("Cost per unit will be $ %f\n",cost_unit);
        System.out.printf("Total cost will be $ %f\n",total);
    }
}

Попробуйте и посмотрите, работает ли он. Вы случайно не в ITAM?

EDIT

Насчет цикла ваш оригинал был верным. Просто нужно окружить код, который вы хотите повторить, и добавить условие для выхода.

Примерно так после создания сканера (почти так же, как вы делали это с первой попытки):

 while( cost > 0 ) { 
     System.out.println("Please enter the cost of the product ( 0 to exit the progam");
     cost = entrada.nextInt();
     .........
     .........
     .........
     System.out.printf("Total cost will be $ %f\n",total)

 }

Это будет повторять код в скобках, пока стоимость больше 0.

Конечно, вам следует изменить начальное значение стоимости, иначе оно не будет введено в lopp с первого раза, и, возможно, вам следует очищать значения перед каждой итерацией.

1 голос
/ 14 февраля 2009

Последние две строки должны быть:

System.out.printf("Cost per unit will be $ %f\n", cost_unit);
System.out.printf("Total cost will be $ %f\n", total);
1 голос
/ 14 февраля 2009

Если вы изучите документацию для синтаксиса формата, который вы используете при печати результата, вы поймете, что используете целочисленное форматирование (% d), где вы хотите форматировать число с плавающей запятой ( % е).

1 голос
/ 14 февраля 2009

изменение

    if (number>0);

    cost_unit = cost * 1.4;
    total = cost_unit*number;

до

        if (number>0) {
        cost_unit = cost * 1.4;
        total = cost_unit*number;
        }
1 голос
/ 14 февраля 2009

Не глядя слишком глубоко на код, одна вещь, которая привлекает мое внимание:

if (number>0);

cost_unit = cost * 1.4;
total = cost_unit*number;

Вероятно, вы хотели бы это:

if (number>0) {
    cost_unit = cost * 1.4;
    total = cost_unit*number;
}

Кстати, я видел это раньше ..... но я не совсем уверен, где ...

1 голос
/ 14 февраля 2009

Казалось бы, "если (число> 0);" заявление не очень поможет.

Попробуйте изменить его на:

if (number>0) {
  cost_unit = cost * 1.4;
  total = cost_unit*number;

  System.out.printf("Cost per unit will be $ %d\n",cost_unit);
  System.out.printf("Cost per unit will be $ %d\n",total);
}

РЕДАКТИРОВАТЬ: Кроме того, кажется, что существует бесконечный цикл, если (первая) указанная стоимость> 0, поскольку вы не меняете ее (стоимость) в цикле.

1 голос
/ 14 февраля 2009

Некоторые подсказки:

while (cost>0)

Вы действительно хотите while -фулл здесь? Вы, кажется, проверяете , если стоимость положительна.

if (number>0);

Этот оператор if не делает ничего полезного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...