Java: як спати?

   import java.util.Scanner;
   import java.lang.Thread;

   class OrigClass {
   public static void main (String[] args){


   for(int i = 0; i<=10;i++){
      System.out.println(i);
      thread.sleep(1000);
   }
  }
 }

Як ви можете бачити, я хочу, щоб програма підраховувала до 10. Що мені потрібно набрати, щоб він працював?

Я, мабуть, повинен сказати, що помилка "thread не може бути вирішена" в Eclipse.

2
@Ranan: Thread! = Thread і винятки повинні бути в курсі. Код вище не буде компілюватися.
додано Автор jlordo, джерело
Ваш код здається мені добре. Це повинно друкувати один номер кожну секунду.
додано Автор Renan, джерело
це Thread, а не thread, і sleep() може викинути виняток, який ви повинні перевірити (або перебрати з основного)
додано Автор Jacopofar, джерело
Що ви маєте на увазі під "те, що мені потрібно набрати"? Як, як скомпілювати/запустити програму Java?
додано Автор SubSevn, джерело
додано Автор Tiago Sippert, джерело
Хлопці хлопці дозволяють йому навчатися, а також піклуватися про виключення приятеля, він ( Thread.sleep (xxx) ) викидає переривчастий випадок :)
додано Автор user2511414, джерело

7 Відповіді

sleep() is a static method on the Thread class, there is no instance variable thread within your code. I'm assuming this throws a NullPointerExcepetion.

class OrigClass {

    public static void main(String[] args) {
        try {
            for (int i = 0; i < 10; i++) {
                System.out.println(i);

                Thread.sleep(1000);//was thread.sleep(1000)
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
2
додано
@TheNewIdiot Я не сказав, що це зробив, я просто повідомляю, що я зробив оновлення за вашою пропозицією.
додано Автор Kevin Bowersox, джерело
@TheNewIdiot обробляється
додано Автор Kevin Bowersox, джерело
@KevinBowersox Я не зменшився: P
додано Автор NINCOMPOOP, джерело
Можливо, зверніться до InterruptedException !
додано Автор NINCOMPOOP, джерело
Звільнення вашої основної кидки недійсним винятком - це просто щасливість. Ви повинні розглянути виняток у вашому основному.
додано Автор JREN, джерело
починаючи з 0 і продовжуючи, поки i <= 10 буде вважатись 11. Це не буде друкувати 11 разів, але все одно буде чекати 11 секунд. І вам також потрібно вставити thread.sleep в спробу спробувати або це не дозволить вам скомпілювати код.
додано Автор JREN, джерело

спробуй

спробуй {
    for (int i=1;i<=10;i++) {
      System.out.println(i);
      Thread.sleep(1000);
    }
 } catch(InterruptedException e) {
        e.printStackTrace();
 }
1
додано
Не тільки це, але зловмисне InterruptedException в рамках for-loop порушено. Просто нічого не зловити і нехай виняток перериває нитку.
додано Автор Marko Topolnik, джерело
Пусті блоки зловити мене плачуть. Вам буде важко налагодити, коли ви сховаєте джерело помилок ...
додано Автор jlordo, джерело
ваш стан має також бути <10, і я повинен почати в 0. Але це лише невелика деталь, щоб збільшити читаність коду, це нічого не змінює на ефективність коду.
додано Автор JREN, джерело
Ви повинні поставити весь цикл у спробувати блок лову, тому що якщо потоку буде перервано, 10 секунд очікування буде розписано, а фактично не більше 10 секунд. Таким чином, було б безглуздо продовжувати цикл після першого винятку.
додано Автор JREN, джерело
Я думав, що він просить підрахувати до 10, тому я почав його в 1 ..
додано Автор Michael Shrestha, джерело
дякую за інформацію ...
додано Автор Michael Shrestha, джерело

Клас thread може викинути виняток. Тоді встановіть thread.sleep (1000) у блоці try-catch.

public static void main (String[] args) throws InterruptedException
    {
        for(int i = 0; i<=10;i++)
        {
            System.out.println(i);
            Thread.sleep(1000);
        }
    }
1
додано
Це дуже неподобство. Ви повинні лише зловити винятки, які можна кинути; інші - найкращі для роботи абонентів і навіть JVM. І дійсно немає сенсу мати це в циклі або як загальний час буде все спотворено після першого перерви.
додано Автор Bathsheba, джерело
@ Джейк Сміт; це все дуже сильно, але Java корисно тут, щоб дозволити вам перервати сплячу нитку. Сильно введені винятки є вашими друзями.
додано Автор Bathsheba, джерело
@Bathsheba Давайте поставимо серйозність: у 99,9% всіх вступних прикладів перевірка InterruptedException є не що інше, як неприємність, яка змушує новачків робити помилки кодування. Якщо це було знято, OP та всі інші користувачі автоматично писали правильний код, навіть не знаючи, які помилки він уникнув. Тому задекларування main (...) throws Exception - це найкращий спосіб симулювати це.
додано Автор Marko Topolnik, джерело
Інша погана порада ... це зовсім не так, як ви ставитеся до InterruptedException .
додано Автор Marko Topolnik, джерело
Ваш код ластівки виключає і продовжує виконання. Належним завданням є дозволити InterruptedException дійсно переривати потоку. У цьому випадку найчистішим варіантом буде просто додавання throws InterruptedException до main .
додано Автор Marko Topolnik, джерело
Yea @ mark.I тільки оновив мій код, як ви сказали, для викидає виняток, а не ловлять його.
додано Автор Manish Doshi, джерело
@ Марк: Чи можете ви пояснити, що ви просите мене зробити ..?
додано Автор Manish Doshi, джерело
Так, це зроблено трюком. Я намагаюсь самостійно вивчати Java ... в Паскалі ми можемо просто пройти затримку (1000); і це було ...
додано Автор Sam, джерело

Якщо ви не хочете мати справу з Thread.sleep (), і з вагомих причин вам слід уникати цього, ви можете використовувати таймер і таймер таска. Приклад нижче

import java.util.Timer;
import java.util.TimerTask;

public class TimerSample {

    public static void main(String[] args) {
        TimerTask task = new TimerTask() {

            int count = 0;

            @Override
            public void run() {
               //Whenever task is run, we will print the count
                System.out.println(count);
                count++;

               //If count reaches 10, we will cancel the task                    
                if (count >= 10) {
                    cancel();
                }
            }
        };

        //Schedule a timer that executes above task every 1 second
        Timer t = new Timer();
        t.schedule(task, 0, 1000);
        return;
    }
}

More interesting use cases are described here: http://www.ibm.com/developerworks/java/library/j-schedule/index.html

0
додано

Вам потрібна велика букви "t"; тобто написати Thread.Sleep (); . Однак я використовую java.util.concurrent.TimeUnit.SECONDS.sleep (1); , оскільки це більш чітко.

І вам потрібно обробляти java.lang.InterruptedException або код не буде компілюватися.

Записати це разом

try {
    for (int i = 0; i < 10; ++i){
        /* Print the counter then sleep for a bit
         * Perhaps this is the wrong way round?
         */
        System.out.println(i);
        java.util.concurrent.TimeUnit.SECONDS.sleep(1);
    }
} catch (final java.lang.InterruptedException e){
  //ToDo - Handle the interruption.        
}
0
додано

Ви це робите так

try {
  for(int i = 0; i < 10; i++) {
      Thread.sleep(1000);
      System.out.println("Counter at " + i + " seconds");
  }
} catch(InterruptedException e) {
 //Thread got interrupted
}
0
додано
Маючи main кинути, це чистий, безпечний варіант, і ідеально підходить для таких невеликих прикладів, як це. Заливання порожнього блоку виклику дає поганий приклад для початківця. У будь-якому разі, я не бачу, де ви мали категоричний імператив обробки InterruptedException , але не, наприклад, NullPointerException . Яке обгрунтування ви маєте для цього?
додано Автор Marko Topolnik, джерело
І чому це, JREN? Яку обробку ви мали на увазі? Обробник виключень за замовчуванням вже друкує stacktrace. Ви думаєте, що обробник {} перевершує цей? Це не називається обробкою винятком; це називається проковтнути , і ви не можете поступити гірше, ніж це.
додано Автор Marko Topolnik, джерело
Простіше, з кращими результатами: public static void main (String ... args) викидає виняток {...}
додано Автор Marko Topolnik, джерело
Ні, це призведе до його чистого виходу, точно так само, як і ваша пропозиція . У будь-якому випадку, як ви не турбуєтесь про вашу програму "розбиття" на кожне виключення, за винятком одного випадку InterruptedException ? Я абсолютно не можу зрозуміти, яким обґрунтуванням може стояти такий дизайн.
додано Автор Marko Topolnik, джерело
Що б там не було, в коментарях слід містити обробку виключень. Питання полягає в Thread.sleep, а не про те, яким чином слід вирішувати виняток. Точка ДЕ, де вона повинна бути оброблена, як і раніше актуальна.
додано Автор JREN, джерело
Якщо ви видалите виключення, це призведе до того, що ваша програма просто зникне, якщо потоку буде перервано. Як це краще?
додано Автор JREN, джерело
Ви дозволили б вашим недійсним основний кидок виняток? Набагато краще обробляти виняток у вашому основному.
додано Автор JREN, джерело

javac OrigClass.java

java OrigClass

Буде компілювати і запускати його, якщо це те, що ви задаєте.

0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників