Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么IntelliJ在我尝试运行或调试任何东西时都会切换到一个特定的类?_Java_Intellij Idea_Junit - Fatal编程技术网

Java 为什么IntelliJ在我尝试运行或调试任何东西时都会切换到一个特定的类?

Java 为什么IntelliJ在我尝试运行或调试任何东西时都会切换到一个特定的类?,java,intellij-idea,junit,Java,Intellij Idea,Junit,我正在IntelliJ的一个项目中工作,我需要在一个名为Lab7的类中创建三个方法,然后在一个名为Lab7Test的单独类中测试所有三个方法。Lab7的代码是我写的,但是测试课是我们的教授给我们的,因为我们还没有学习junit,测试似乎就是这样运行的。这是Lab7: package Lab7; import java.util.Scanner; public class Lab7 { public static void main(String[] args){ //

我正在IntelliJ的一个项目中工作,我需要在一个名为Lab7的类中创建三个方法,然后在一个名为Lab7Test的单独类中测试所有三个方法。Lab7的代码是我写的,但是测试课是我们的教授给我们的,因为我们还没有学习junit,测试似乎就是这样运行的。这是Lab7:

package Lab7;
import java.util.Scanner;

public class Lab7 {
    public static void main(String[] args){
        // variable declarations for part 1
        String title;
        String firstName;
        String lastName;
        Scanner in = new Scanner(System.in);

        // prompt for input for part 1
        System.out.print("Enter a title:");
        title = in.next();
        System.out.print("Enter your first name:");
        firstName = in.next();
        System.out.print("Enter a your last name:");
        lastName = in.next();

        // call the method for part 1
        greeting(title, firstName, lastName);

        // variable declarations for part 2
        int number1;
        int number2;

        // user prompts for part 2
        System.out.print("Enter first number:");
        number1 = in.nextInt();
        System.out.print("Enter second number:");
        number2 = in.nextInt();

        // call the methods max and sumTo inside the println statement
        System.out.println("The largest number is " + max(number1, number2));
        System.out.println("The sum of the numbers is " + sumTo(number1, number2));
    }
    /******************** greeting method goes here*********************/
    public static void greeting(String title, String firstName, String lastName) {
        System.out.println("");
        System.out.println("Dear " + title + " " + firstName + " " + lastName + ",");
        System.out.println("");
    }
    /***********************end of method*************************/

    /******************** max method goes here*********************/
    public static int max(int num1, int num2){
        if(num1 >= num2){
            return num1;
        }
        else{
            return num2;
        }
    }
    /***********************end of method*************************/

    /******************** sumTo method goes here*********************/
    public static int sumTo(int num1, int num2) {
        int counter = 0;
        int sum = 0;
        if(num1 == num2){
            sum = num1;
        }
        else if (num1 > num2) {
            counter = num2;
            while(counter != num1 + 1){
                sum = sum + counter;
                counter++;
            }

        }
        else if (num1 < num2){
            counter = num1;
            while(counter != num2 + 1){
                sum = sum + counter;
                counter++;
            }

        }
        return sum;
    }
    /***********************end of method*************************/
}

现在,我应该提到,我必须用不同的程序做同样的事情(在不同的类中测试一个类中的方法),并且进行得非常顺利。这些程序称为DebugLab和DebugLabTest,我在让DebugLabTest运行提供的方法时没有遇到任何问题。然而,当涉及到Lab7Test时,该类在“Lab7.(方法)”的任何用法中都不能识别“Lab7”,并提供找不到符号的错误代码。它不仅不能识别Lab7(在同一个软件包中),而且每当我试图运行我列出的其他三个程序中的任何一个时,IntelliJ都会直接跳回Lab7Test并打印错误代码。我试过从顶部的run选项卡、类名旁边的灯泡以及右上角的running和debugging按钮运行其他程序。所有这些都会产生相同的结果,我运行它们的唯一方法是删除Lab7Test。

如果我答对了您的问题,class
Lab7Test
不会编译,因为它无法将class
Lab7
归档

如果至少有一个编译错误,整个项目编译将失败。这就是它在Java世界中的工作方式,intelliJ也是这样工作的

由于测试是在编译之后执行的(所有测试都是由一个常规的java进程驱动的,读取JVM就是为了这个目的而产生的),这显然是与二进制代码一起工作的,所以您必须首先编译这些东西

现在,假设您在
Lab7Test
中有一个复杂错误。由于编译失败,这意味着您将无法在该模块中运行任何测试,当然包括
DebugLabTest
。 删除
Lab7Test
时,错误消失,您可以继续

到目前为止,就决议而言,一切都很好

您应该始终检查编译错误到底是什么。java编译器确实是一个“聪明”的软件,它可以帮助您解决错误

您还没有在
Lab7Test
类中发布实际的编译错误,但我猜它无法将
Lab7

如果是这样,您应该确保它们位于同一个包中。因为如果没有,则
Lab7Test
必须包含一行带有
Lab7
的“显式”导入。看起来不是这样,类
Lab7Test
驻留在默认包中(文件
Lab7Test
中没有类似于
package abc;
的行)。因此确保Lab7也驻留在相同的包中(默认)包,或者将行
import foo.bar.Lab7;
添加到
Lab7Test.java
中,假设您确实希望
Lab7
文件驻留在包
foo.bar


另外,这个答案可能看起来过于谨慎,但很明显,它是由一个在编程中迈出第一步的人提出的,所以它是有意的:)

来自:“Java(不要与JavaScript、JScript或JS混淆)…”。“JavaScript(不要与Java混淆)…”我想您需要添加package语句“package Lab7;”参加考试
import static org.junit.Assert.assertEquals;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Lab7Test {

    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();

    @Before
    public void setUpStreams() {
        System.setOut(new PrintStream(outContent));
        System.setErr(new PrintStream(errContent));
    }

    @Test
    public void greetingTest() {
        Lab7.greeting("Mr.", "Buzz", "Lightyear");
        String rawOutput = outContent.toString();
        String[] outputLines = rawOutput.split("\n");
        assertEquals("", outputLines[0]);
        assertEquals("Dear Mr. Buzz Lightyear,", outputLines[1]);
    }

    @Test
    public void max10and2Test() {
        int max = Lab7.max(10, 2);
        assertEquals(10, max);
    }

    @Test
    public void max2and10Test() {
        int max = Lab7.max(2, 10);
        assertEquals(10, max);
    }

    @Test
    public void max50and50Test() {
        int max = Lab7.max(50, 50);
        assertEquals(50, max);
    }

    @Test
    public void maxMinus10andMinus2Test() {
        int max = Lab7.max(-10, -2);
        assertEquals(-2, max);
    }

    @Test
    public void maxMinus2andMinus10Test() {
        int max = Lab7.max(-2, -10);
        assertEquals(-2, max);
    }

    @Test
    public void max0and0Test() {
        int max = Lab7.max(0, 0);
        assertEquals(0, max);
    }

    @Test
    public void sumTo2and10Test() {
        int max = Lab7.sumTo(2, 10);
        assertEquals(54, max);
    }

    @Test
    public void sumTo10and2Test() {
        int max = Lab7.sumTo(10, 2);
        assertEquals(54, max);
    }

    @Test
    public void sumTo50and50Test() {
        int max = Lab7.sumTo(50, 50);
        assertEquals(50, max);
    }

    @Test
    public void sumToMinus10andMinus2Test() {
        int max = Lab7.sumTo(-10, -2);
        assertEquals(-54, max);
    }

    @Test
    public void sumToMinus2andMinus10Test() {
        int max = Lab7.sumTo(-2, -10);
        assertEquals(-54, max);
    }

    @Test
    public void sumTo0and0Test() {
        int max = Lab7.sumTo(0, 0);
        assertEquals(0, max);
    }

    @After
    public void cleanUpStreams() {
        System.setOut(null);
        System.setErr(null);
    }
}