2016-11-21 163 views
-1

嘿,我正在一个项目工作,输出什么也没给。我已经尝试了一大堆除了将System.out.print移动到只打印出无数个随机数字的大括号之外的所有输出都没有输出的东西。它是一个短代码,所以在这里它是:Java程序运行,但没有输出

import java.util.Scanner; 
import java.io.IOException; 
import java.io.File; 

public class ACSLPrintsJR { 
public static int value(int num){ 
int [] array = {0,16,16,8,8,4,4,2,2,1,1}; 
    return array[num]; 
} 

public static void main(String[] args) throws IOException { 
    int top = 1; 
    int bottom = 1; 
    File file = new File("ACSLPRINTSJR.IN"); 
    Scanner scan = new Scanner(file); 
    int num = scan.nextInt(); 
    while (num != 0){ 
    num = scan.nextInt(); 
     if (num % 2 == 0) 
      top += 1 + value(num); 
     else 
      bottom += 1 + value(num); 
    }  
    System.out.println(top+"/"+bottom); 
scan.close(); 
} 

} 

正如我说没有输出和这里是IN的内容文件

输入是:

预期输出是:

19/3

1/1

电流输出: 没有

+3

您需要使用'num = scan.nextInt()'在while循环中更新'num'。 –

+1

浏览纸上的代码,看看它在循环中做了什么。如果你这样做了,你会发现它从来没有从扫描仪获取数据。 –

+0

我这样做了,现在它实际上输出了一些东西,但它不是正确的输出,它只能用于一行 – icecreeper01

回答

1

您需要从循环中的扫描仪读取数据。以下是为您更新的代码。

public class ACSLPrintsJR { 
    public static int value(int num) { 
     int[] array = {0, 16, 16, 8, 8, 4, 4, 2, 2, 1, 1}; 
     return array[num]; 
    } 

    public static void main(String[] args) throws IOException { 
     File file = new File("ACSLPRINTSJR.IN"); 
     Scanner scan = new Scanner(file); 
     int num; 
     while (scan.hasNext()) { 
      int top = 1; 
      int bottom = 1; 
      while ((num = scan.nextInt()) != 0) { 
       if (num % 2 == 0) 
        top += value(num); 
       else 
        bottom += value(num); 
      } 
      System.out.println(top + "/" + bottom); 
     } 
     scan.close(); 
    } 
} 
+0

我试过了,但它返回了错误的输出 – icecreeper01

+0

您的预期输出是什么? –

+0

虐待添加到描述 – icecreeper01

1

您已经在这里创造一个无限循环:

int num = scan.nextInt(); 
while (num != 0){ 
    if (num % 2 == 0) 
     top += 1 + value(num); 
    else 
     bottom += 1 + value(num); 
}  
System.out.println(top+"/"+bottom); 

您在num读取你的档案,如果num不是零,厕所p无限地运行,因为你永远不会修改while循环中的num的值。我冒昧地猜测,你需要说:

int num = scan.nextInt(); 
do{ 
    if (num % 2 == 0) 
     top += 1 + value(num); 
    else 
     bottom += 1 + value(num); 

    num = scan.nextInt(); 
}while(num != 0); 
System.out.println(top+"/"+bottom); 

不过,我不知道你的代码的确切意图,所以这可能不是所期望的方法。不过,您需要在while循环中修改num,否则您将无限循环。

+0

确实意味着它在它的大括号内执行的事情,而num!= 0? – icecreeper01

+0

我改变了它,但它仍然返回5/4 – icecreeper01

+0

@ icecreeper01,'do-while'循环是一个循环,其中第一次迭代在条件(在这种情况下为'num!= 0)被检查之前执行。 – SpencerD

0

num变量永远不会改变它的值,我认为你必须为你的文件中的每一行这样做。你必须更新你的后卫,比如while(scan.hasNextInt()),这样你就可以继续前进,直到文件中有一个int值,然后用scan.nextInt()来选择它。其余代码基本相同。我现在看到了你的编辑,现在如果你用`scan.nextInt()'选择的值等于0,你必须打印你需要的值,重置你的计数器变量,并继续进入循环,直到你选择最后0在您的文件中。我希望我足够清楚。