Почему мой текущий результат не обновляется в main?

#java #currency #bitcoin #tracker

#java #Валюта #биткойн #отслеживание

Вопрос:

Я создаю валютный трекер для отслеживания текущей стоимости биткойнов.

класс «bitcoinlive» работает правильно, если я запускаю его в собственном методе main, но он не будет работать, когда я создаю экземпляр файла. Мне нужно, чтобы он печатал текущую стоимость биткойнов.

Я пытаюсь распечатать переменную «a53», но я не знаю, правильно ли я это делаю. Вот список импорта для класса bitcoinlive, потому что он продолжал выдавать мне сообщение об ошибке и не позволял этому быть отдельным от кода при публикации этого.

 public static void main(String[] args) {
    Dates d = new Dates();
    String s = d.getDate();
    System.out.println("Date is"   s);
    W3 mywallet = new W3();
    Bitcoinlive mybitcoinlive = new Bitcoinlive();
    L3 myledger = new L3();
    Scanner myscanner = new Scanner(System.in);
    double buy = 0.0;
    int choice = 0;
    double bitcoin = 4000;
    double USD = 20000;

    while (choice != 5) {
        System.out.println("Welcome! Enter a command. n"
                  "Enter 1) Buy Bitcoin n"
                  "Enter 2) Sell Bitcoin  n"
                  "Enter 3) Print Balance n"
                  "Enter 4) Print History n"
                  "ENTER 5) Exit Programn");
        choice = myscanner.nextInt();

        if (choice == 1) {
            System.out.println("How many? ");
            buy = myscanner.nextDouble();
            mywallet.add(buy);
            bitcoin = bitcoin * buy;
            USD = USD - bitcoin;

            myledger.save(s);

            System.out.println("you have bought:"   mywallet.numcoins);
            System.out.println(USD);
            System.out.println(mybitcoinlive.a53);
            bitcoin = 4000;

        } else if (choice == 2 amp;amp; USD >= bitcoin) {
            System.out.println("How many?");

            buy = myscanner.nextDouble();
            mywallet.subtract(buy);
            System.out.println("you have sold:"   mywallet.numcoins);
            USD = USD   bitcoin;
            System.out.println(USD);
            bitcoin = 4000;
            myledger.save(s);

        } else if (choice == 3) {
            System.out.println("Balance:"   mywallet.numcoins);

        } else if (choice == 4) {
            System.out.println("Transaction history:  ");

            System.out.println("you have made"   myledger.getsize()   "transactions"
                      d.getDate());

        } else if (choice == 5) {
            // exit
            break;

        } else if (choice == 7) {
            System.out.println(mybitcoinlive.price);
        }

    }

    System.out.println("Bye");

}
 

это мой отдельный класс

 public class Bitcoinlive {



    Double a53=0.0;
    double price;     

    Double get() {

        try {
            String urlcoincapeth13 = "https://api.coinmarketcap.com/v1/ticker/bitcoin/";
            Document docblocktradescoincapeth13 = Jsoup.parse(new URL(urlcoincapeth13).openStream(), "UTF-8", "", Parser.xmlParser());
            String a13 = docblocktradescoincapeth13.toString();
            int a23 = a13.indexOf("price_usd")   13;
            int a33 = a13.indexOf("price_btc") - 4;
            String a43 = a13.substring(a23, a33);
            a53 = Double.parseDouble(a43);
        } catch (Exception e) {
            System.out.println("Error accessing bitcoin values");
        }

        return a53;
    }
}
 

Комментарии:

1. импорт java.io .*; импортировать java.io.IOException; импортировать java.net.URL; импортировать org.jsoup. Jsoup; импорт org.jsoup.nodes. Документ; импорт org.jsoup.nodes. Элемент; импорт org.jsoup.parser. Синтаксический анализатор; импорт org.jsoup.select. Элементы; импорт java.util. Сканер; По какой-то причине веб-сайт не позволил мне опубликовать импорт для класса livebitcoin. итак, вот они выше

2. Покажите нам сообщение об исключении и stacktrace для исключения, которое вы улавливаете.

3. Я не получаю никаких ошибок или исключений. (Я новичок, поэтому прошу прощения, если я не совсем понимаю, что вы имеете в виду.) Если вы запустите класс bitcoin live вместе с импортом, который я оставил в комментарии, результат будет правильным. У меня просто возникли проблемы с привязкой текущего результата к моему основному методу. Я предположил, что a53 — это переменная, которая будет содержать текущий результат, но, как вы можете видеть в варианте 7 моей программы, она просто выводит «0.0», в то время как, если я запускаю класс bitcoinlive в его собственном основном классе, он работает и печатает 5000 что-то.

Ответ №1:

Ваш класс Bitcoinlive хранит цену в поле с именем a53 . Вы можете обновить это поле, позвонив get() . Однако похоже, что вы никогда не вызываете get() — вы просто вызываете поле:

 System.out.println(mybitcoinlive.a53);
 

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

 System.out.println(mybitcoinlive.get());
 

Или сначала обновите его:

 mybitcoinlive.get();
System.out.println(mybitcoinlive.a53);