Как принимать ввод во время «сообщения»/r в циклеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как принимать ввод во время «сообщения»/r в цикле

Сообщение Anonymous »

Здравствуйте, я не совсем уверен, как сформулировать название, но я пытаюсь создать блокчейн для своего первого большого проекта, и у меня есть 3 потока: узел/майнер/кошелек. При майнинге он постоянно распечатывает хеш (постоянно меняющийся) в одной и той же строке.

System.out.print(block.hash + "\r" );

Мне бы хотелось, чтобы пользователь мог совершать транзакции из своего кошелька (требуя ввода), но похоже, что из-за строки I' Как я написал выше, он либо игнорирует ввод, либо принимает хэш в качестве входных данных, когда я нажимаю Enter. Я попробовал использовать объект сканера, выполнив Scanner.nextline(). Это принимает ввод, но из-за многократной распечатки хеша он заменяет ввод, который пользователь вводит вручную, текущим хешем.

Код: Выделить всё

// BLOCK CLASS mine method
public void mineBlock(){
nonce++;
hash = calHash();
currentHashValue = new BigInteger(hash,16);
}

// MINER CLASS minemethod
public void mineBlock(Block block) {
System.out.println("mining block at index: " + block.blockNumber + ", at difficulty: " + block.getDifficulty() + "... ");
while (!block.isHashFound(block.currentHashValue)) {
block.mineBlock();
// System.out.print(block.hash + "\r");

}
System.out.println("Nice you've mined a block: " + block.hash);
}

// TEST INPUT CLASS
public class test implements Runnable{
Scanner scanner = new Scanner(System.in);

@Override
public void run() {
System.out.println("please input something");
String input = scanner.nextLine();
System.out.println("you have inputted: " + input);
}
}

public class Main {

public static void main(String[] args) {
ConcurrentLinkedQueue linkedQueueToMiner = new ConcurrentLinkedQueue();

Thread miner = new Thread(new Miner(linkedQueueToMiner));
Thread wallet = new Thread(new Wallet(linkedQueueToMiner));
Thread node = new Thread(new Node(linkedQueueToMiner));
Thread test = new Thread(new test());

node.start();
wallet.start();
miner.start();
test.start();

}
}
Здесь я пытаюсь ввести «а», но он не распечатывает его,

Код: Выделить всё

please input something
mining block at index: 20, at difficulty: 776499968...
5f15dd7faa
you have inputted:
6d27ec1231153bdc
0ba3c8f36044
d3ce
Когда я это делаю, это не работает, но когда я удаляю

Код: Выделить всё

System.out.print(block.hash + "\r");
Все работает отлично

Код: Выделить всё

please input something
mining block at index: 20, at difficulty: 776499968...
aaaaaaaa
you have inputted: aaaaaaaa
Майнер вообще не делает паузу и не ждет, пока тестовый класс ожидает ввода здесь. Нижний вывод работает, но я бы хотел, чтобы пользователь видел, как хеши меняются по мере того, как майнер пытается получить правильный хэш.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-a-loop
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»